# Commandes Anakeen-CLI
L'outil en invite de commande anakeen-cli permet d'effectuer diverses commandes suivant une syntaxe précise et exécutant une suite d'actions.
# analyzeModule
La commande analyzeModule
permet de récupérer les informations du contenu d'un module. Elle récupère les informations
du fichier info.xml
situé à la racine du module indiqué.
# Arguments
sourcePath (string)
Chemin du dossier accueillant le fichier
info.xml
du module.
Par défaut, le chemin est le dossier courant.
.
Alias:-s
jsonReturn (boolean)
Indique qu'une donnée de retour au format JSON est attendue.
Par défaut, jsonReturn est valué àfalse
.
Alias: aucun.
# Retour
Par défaut (jsonReturn = false
), seules les informations du fournisseur (vendor
), du nom du module (name
) et de sa
version (version
) sont retournées.
Si jsonReturn = true
, alors une donnée JSON contenant les informations du module ainsi que des informations liées aux
différents fichiers composant le module sont retournées.
# Exemple
Récupération partielle des informations du module :
npx @anakeen/anakeen-cli analyzeModule -s ./admin-center/
Résultat :
[9/5/2019] [5:42:15 PM] › ▶ moduleInfo Initialized timer...
[9/5/2019] [5:42:15 PM] › ℹ info vendor : Anakeen
[9/5/2019] [5:42:15 PM] › ℹ info name : admin-center
[9/5/2019] [5:42:15 PM] › ℹ info version : 2.0.1
[9/5/2019] [5:42:15 PM] › ◼ moduleInfo Timer run for: 48ms
[9/5/2019] [5:42:15 PM] › ✔ success moduleInfo done
Récupération de toutes les informations d'un module :
npx @anakeen/anakeen-cli analyzeModule -s ./admin-center/ --jsonReturn true
Résultat :
{
"sourcePath": "./admin-center/",
"moduleInfo": { "vendor": "Anakeen", "name": "admin-center", "version": "2.0.1" },
"buildInfo": {
"build": {
"config": {
"$": { "xmlns:module": "https://platform.anakeen.com/4/schemas/module/1.0" },
"source": [{ "$": { "path": "src" } }],
"po-config": [{ "po-js": [{ "$": { "source": "src/vendor/Anakeen/**/*js", "target": "ADMIN_CENTER" } }] }],
"stub-config": [
{ "stub-struct": [{ "$": { "source": "src/vendor/Anakeen/AdminCenter/SmartStructures/**/*.xml" } }] }
],
"check-config": [{ "config-xml": [{ "$": { "source": "src/**/*.xml" } }] }]
}
},
"buildPath": ["admin-center/src"]
}
}
# build
La commande build
permet de construire le fichier .app
à partir des fichiers sources définis dans le fichier
info.xml
du module.
# Arguments
sourcePath (string)
Chemin du dossier accueillant le fichier
info.xml
du module.
Par défaut, le chemin est le dossier courant.
.
Alias :-s
.targetPath (string)
Chemin du dossier accueillant le fichier
.app
construit.
Par défaut, le chemin est le dossier courant.
.
Alias:-t
.autoRelease (string)
Préfixe au nom du fichier
.app
construit.
SiautoRelease
est fourni, un horodatage est ajouté à la fin du nom du fichier.
Par défaut,autoReleases
est valué àfalse
.
Alias : aucun.noCheck (boolean)
Indique si les fichiers XML du module doivent être vérifiés.
Par défaut,noCheck
est valué àfalse
.
Alias : aucun.
# Retour
Si une erreur se produit durant l'exécution de cette commande, un message de retour contenant le message d'erreur est renvoyé à l'utilisateur.
# Exemple
- Construction du fichier
.app
de admin-center :
npx @anakeen/anakeen-cli build -s ./admin-center/ --noCheck
- Résultat :
[9/5/2019] [6:36:20 PM] › ▶ build Initialized timer...
[build] › ℹ info Generate admin-center-2.0.1.app
[build] › ℹ info Version 2.0.1
[9/5/2019] [6:36:20 PM] › ◼ build Timer run for: 514ms
[9/5/2019] [6:36:20 PM] › ✔ success build done
# compose Jusqu'à la version 2020.03
WARNING
La commande @anakeen/anakeen-cli compose
est dépréciée depuis la version 2021.1
. Préférer la commande
@anakeen/anakeen-platform
.
La commande compose est une méta commande permettant de gérer les dépendances du projet. Elle permet de gérer les éléments suivants :
- récupération des paquets standard pour générer le livrable client,
- génération du livrable client,
- récupération des sources à jour pour le développement,
- suivi et mise à jour des dépendances du projet.
# add
La commande compose add
ajoute un module au projet en cours.
# Arguments
moduleName (string)
Nom du module à ajouter au projet Alias :
-m
.moduleVersion (string)
Sélecteur semver de la version de module à ajouter. Par défaut,
moduleVersion
est valué àlatest
, il récupère donc la dernière version stable du module Alias :-v
.Pour recuperer et installer la derniere version (RC), il faut mettre l'option
moduleVersion
avec l'optiondev
.registry (string)
Registry d'où provient le module à ajouter. Par défaut, s'il n'existe qu'un registry dans le projet celui-ci est sélectionné. Alias :
-r
.
type (string)
Précise le type de module à ajouter :développement (dev) ou production (prod). Alias :
-t
.debug (boolean)
Passe la commande en mode verbose.
Par défaut,debug
est valué àfalse
.
Alias :-d
.cwd (string)
Permet d'indiquer le chemin d'éxécution de la commande.
Par défaut,./
.
# Retour
Status de l'exécution de la commande
# Exemple
Ajout de user-interfaces
au projet en cours.
npx @anakeen/anakeen-cli compose add user-interfaces
# addAppRegistry
npx @anakeen/anakeen-cli compose addAppRegistry [paramètres]
# Description
addAppRegistry
permet d'ajouter un dépôt de modules .app
à votre projet.
# Arguments
--registryName: string (Required)
: Le nom du dépôt à ajouter.--registryUrl: string (Required)
: L'url du dépôt.--registryUser: string (Optional)
: Le nom de l'utilisateur à authentifier sur le dépôt. Non défini par défaut.--registryPassword: string (Optional)
: Le mot de passe de l'utilisateur à authentifier sur le dépôt. Non défini par défaut.--debug: boolean (Optional)
: Passe la commande en mode verbose.--cwd: string (Optional)
: Permet d'indiquer le chemin d'éxécution de la commande.
# Exemple
npx @anakeen/anakeen-cli compose addAppRegistry --registryName="anakeen-stable" --registryUrl="https://a4ppm.ap4.anakeen.com/" --registryUser="john.doe" --registryPassword="secret"
# Notes
- Les identifiants de connexion aux dépôts de modules (spécifiés par les options
--authUser
et--authPassword
) sont sauvegardés par défaut dans un fichier.anakeen-cli.credentials.xml
situé dans le répertoire d'exécution de la commande. - Le fichier
.anakeen-cli.credentials
est un fichier au format XML structuré comme suit :<?xml version="1.0" encoding="UTF-8" standalone="yes" xmlns="https://platform.anakeen.com/4/schemas/compose-credentials/1.0"?> <credentials> <credential url="http://a4ppm-stable.corp.anakeen.com:8080/stable/" authUser="john.doe" authPassword="secret"/> </credentials>
# init
npx @anakeen/anakeen-cli compose init [paramètres]
# Description
init
initialise votre dépôt local.
Cette commande crééra un fichier repo.xml
ainsi que les dossiers qui contiendront les modules .app
et les fichiers
sources de vos modules.
# Arguments
--localRepo: string (Optional)
: Le chemin vers le dossier qui contiendra les.app
de vos modules. Par défaut, la valeur estanakeen/repo
.--localSrc: string (Optional)
: Le chemin vers le dossier qui contiendra les fichiers sources de vos modules. Par défaut, la valeur estanakeen/src
.--debug: boolean (Optional)
: Passe la commande en mode verbose.--cwd: string (Optional)
: Permet d'indiquer le chemin d'éxécution de la commande.
Voir la structure du dépôt local pour plus d'informations.
# Exemple
npx @anakeen/anakeen-cli compose init --localRepo="anakeen-compose/repo" --localSrc="anakeen-compose/src"
# install
npx @anakeen/anakeen-cli compose install [paramètres]
# Description
install
permet d'installer tous les modules de votre projet.
Par défaut, la liste de ces modules à installer est décrite dans repo.xml
. Un snapshot de ces modules est alors généré
dans repo.lock.xml
.
L'option --frozen-lockfile
vous permet de ne prendre en compte que les modules présents dans repo.lock.xml
au lieu
de repo.xml
# Arguments
--frozen-lockfile: string (Optional)
: Demande à compose de ne pas modifier le fichierrepo.lock.xml
. Par conséquent, la liste des modules à installer est prise depuisrepo.lock.xml
au lieu derepo.xml
. Par défaut, cette commande est désactivée.--debug: booleén (Optional)
: Permet d'afficher les messages de debug pendant l'installation. Désactivé par défaut.--cwd: string (Optional)
: Permet d'indiquer le chemin d'éxécution de la commande.
# Exemple
npx @anakeen/anakeen-cli compose install --frozen-lockfile --debug
# upgrade
npx @anakeen/anakeen-cli compose upgrade [paramètres] [module@version]...
# Description
upgrade
permet de mettre à jour vos modules dans le dépôt local.
# Arguments
--moduleName: string (Optional)
: Permet de préciser les modules et les versions correspondantes à mettre à jour. La version suit la notation SemVer, par exemplesecurity@2.0.0
.Si aucun module n'est précisé, compose mettra à jour les modules à partir des versions définies dans
repo.xml
. L'option--latest
permettra alors de mettre à jour tous les paquets à la dernière version disponible.--latest: string (Required)
: Permet de mettre à jour les modules avec la dernière version. Option désactivée par défaut.--dev: string (Required)
: Permet de mettre à jour les modules avec la dernière version de développement (RC).--debug: string (Optional)
: Permet d'afficher les messages de debug pendant la mise à jour. Option désactivée par défaut.--debug: booleén (Optional)
: Permet d'afficher les messages de debug pendant l'installation. Désactivé par défaut.--cwd: string (Optional)
: Permet d'indiquer le chemin d'éxécution de la commande.
# Exemple
Un exemple de mise à jour d'un module à une version précise :
npx @anakeen/anakeen-cli compose upgrade user-interfaces@2.0.1 security@1.0.1 --debug
Cet exemple met à jour tous les modules à la dernière version :
npx @anakeen/anakeen-cli compose upgrade --latest
Cet exemple met à jour tous les modules à la dernière version de développement :
npx @anakeen/anakeen-cli compose upgrade --dev
# addLocalApp
Cette commande permet d'ajouter un ou un ensemble d'app généré localement dans le repository du projet.
Ce glob est ajouté dans le fichier repo.xml et les app locaux sont ajoutés à chaque install et à la construction du
control local.
# Arguments
localPath (string)
Glob permettant d'ajouter des app locaux au repository Alias :
-p
.debug (boolean)
Passe la commande en mode verbose.
Par défaut,debug
est valué àfalse
.
Alias :-d
.cwd (string)
Permet d'indiquer le chemin d'éxécution de la commande.
Par défaut,./
.
# Exemple
Un d'ajout d'un path contenant les fichiers locaux
npx @anakeen/anakeen-cli compose addLocalApp --localPath ./build/*.app
# generateInstaller
Cette commande permet de générer un control contenant le repository local, il est directement livrable pour faire une
installation ou une mise à jour.
Le control est généré en utilisant le control référencé dans le repo.xml et il est généré sous la forme d'un fichier zip
contenant un README.md avec les instructions d'installation.
# Arguments
localRepoName (string)
Emplacement du repository local dans le zip généré Par défaut :
control/localRepo
controlTarget (string)
Emplacement où le zip est généré Par défaut :
./control.zip
installDevDependencies (boolean)
Indique si l'on génère l'installeur avec ou sans les modules de développement. Par défaut:
false
. Alias:--dev
.addLocalApp (string)
Glob vers un ou plusieurs app local à ajouter au livrable
customReadme (string)
Emplacement vers un template de fichier README en mustache, si le template est présent alors il est intégré dans le control.zip à la racine. La clef qui est remplacée est
path
. Par défaut :""
debug (boolean)
Passe la commande en mode verbose.
Par défaut,debug
est valué àfalse
.
Alias :-d
.cwd (string)
Permet d'indiquer le chemin d'éxécution de la commande.
Par défaut,./
.
# Exemple
Génération d'un installeur pour les éléments en cours
npx @anakeen/anakeen-cli compose generateInstaller
# check
La commande check
permet de valider le contenu des fichiers XML du module
# Arguments
sourcePath (string)
Chemin du dossier accueillant le fichier
info.xml
du module.
Par défaut, le chemin est le dossier courant.
.
Alias :-s
.verbose (boolean)
Indique à la commande d'afficher plus d'informations de log.
Par défaut,verbose
est valué àfalse
.
Alias :-v
.
# Retour
Si une erreur survient lors de l'exécution de la commande, un message contenant les informations liées à l'erreur est
retourné.
Si l'option verbose
est active, alors un log de chaque fichier analysé est retourné durant l'exécution de la commande.
# Exemple
- Vérification des fichiers XML du module admin-center :
npx @anakeen/anakeen-cli check -s ./admin-center/ -v
- Résultat :
[9/5/2019] [6:57:48 PM] › ▶ check Initialized timer...
[check] › ℹ info Analyze : admin-center/src/config/SmartDataEngine/AdminCenter/adminAccount.xml : ✓
[check] › ℹ info Analyze : admin-center/src/config/SmartDataEngine/AdminCenter/adminCenter.xml : ✓
[check] › ℹ info Analyze : admin-center/src/config/SmartDataEngine/AdminCenter/adminI18n.xml : ✓
[check] › ℹ info Analyze : admin-center/src/config/SmartDataEngine/AdminCenter/adminParameters.xml : ✓
[check] › ℹ info Analyze : admin-center/src/config/SmartDataEngine/AdminCenter/adminRoutes.xml : ✓
[check] › ℹ info Analyze : admin-center/src/config/SmartDataEngine/AdminCenter/adminTokens.xml : ✓
[check] › ℹ info Analyze : admin-center/src/config/SmartDataEngine/AdminCenter/adminVaults.xml : ✓
[check] › ℹ info Analyze : admin-center/src/config/SmartDataEngine/AdminCenter/adminWorkflow.xml : ✓
[check] › ℹ info Analyze : admin-center/src/config/SmartDataEngine/AdminCenter/test.xml : ✓
[check] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/Accounts/110-AdminCenterRoles.xml : ✓
[check] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/Accounts/111-AdminManagerProfile.xml : ✓
[check] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/Config/hubConfiguration.xml : ignored
[check] › ℹ info Analyze : admin-center/src/vendor/Anakeen/Routes/Admin/Lib/vendor/sepia/po-parser/phpunit.xml : ignored
[9/5/2019] [6:57:48 PM] › ◼ check Timer run for: 104ms
[9/5/2019] [6:57:48 PM] › ✔ success check done
# checkConfigFile
La commande checkConfigFile
permet de valider le contenu d'un fichier de configuration XML.
# Arguments
sourcePath (string)
Chemin du fichier XML
Par défaut, le chemin est le dossier courant.
.
Alias :-s
.
En conflit avecglob
.glob (string)
Instruction glob des fichiers de configuration.
Alias :-g
.
En conflit avecsourcePath
.verbose (boolean)
Indique à la commande d'afficher plus d'informations de log.
Par défaut,verbose
est valué àfalse
.
Alias :-v
.
# Retour
Si une erreur survient lors de l'exécution de la commande, alors un message contenant les informations liées à l'erreur
est retourné.
Si l'option verbose
est active, alors un log du fichier analysé est retourné durant l'exécution de la commande.
# Exemple
- Vérification d'un fichier XML
hubConfiguration.xml
de admin-center :
npx @anakeen/anakeen-cli checkConfigFile -s ./admin-center/src/config/SmartDataEngine/AdminCenter/adminCenter.xml -v
- Résultat :
[9/6/2019] [10:03:51 AM] › ▶ checkConfigFile Initialized timer...
[checkConfigFile] › ℹ info Analyze : ./admin-center/src/config/SmartDataEngine/AdminCenter/adminCenter.xml : ✓
[9/6/2019] [10:03:51 AM] › ◼ checkConfigFile Timer run for: 34ms
[9/6/2019] [10:03:51 AM] › ✔ success check configuration file done
# create
La commande create
permet de créer un module initialisé avec tout ses fichiers sources. L'exécution de cette commande
retourne un formulaire à l'utilisateur, avant la création des dossiers et fichiers, afin de définir les arguments et
options.
# Arguments
sourcePath (string)
Chemin vers le dossier racine du module à créer.
Par défaut, le chemin est le dossier courant.
.
Alias :-s
.
Note: le dossier racine du module doit exister.vendorName (string)
Nom de l'organisation fournissant le module.
Alias :-v
.
Note: Le nom de l'organisation doit être exclusivement formé de caractères alphanumériques.namespace (string)
Titre de l'espace de nommage.
Alias:-n
.
Note: Le Titre de l'espace de nommage doit être exclusivement formé de caractères alphanumériques.moduleName (string)
Nom du module.
Alias:-m
.
Note: Le nom du module doit être exclusivement formé de caractères alphanumériques.withSmartStructure (boolean)
Indique l'ajout d'un fichier de configuration de Smart Structures.
Par défaut,withSmartStructure
est valué àtrue
.
Mettre--withSmartStructure=false
pour désactiver cette option.withConfig (boolean)
Indique l'ajout d'un fichier de configuration de route et le fichier XML correspondant.
Par défaut,withConfig
est valuétrue
.
Mettre--withConfig=false
pour désactiver cette option.withPublic (boolean)
Indique l'ajout d'un dossier
public
.
Par défaut,withPublic
est valué àtrue
.
Alias:-p
.
Mettre--withPublic=false
pour désactiver cette option.withAccount (boolean)
Indique l'ajout des fichiers de configuration des
comptes
.
Par défaut,withAccount
est valué àtrue
.
Mettre--withAccount=false
pour désactiver cette option.withAutocompletion (boolean)
Indique l'ajout des classes PHP d'autocomplétion du module. Par défaut,
withAutocompletion
est valué àtrue
.
Mettre--withAutocompletion=false
pour désactiver cette option.withEnumerates (boolean)
Indique l'ajout des fichiers de configuration des
énumérés
.
Par défaut,withEnumerates
est valué àtrue
.
Mettre--withEnumerates=false
pour désactiver cette option.withSettings (boolean)
Indique l'ajout des dossiers de contrôles de vues et des droits sur les Smart Fields.
Par défaut,withSettings
est valué àtrue
.
Mettre--withSettings=false
pour désactiver cette option.withRoutes (boolean)
Indique l'ajout d'une classe PHP d'exemple pour les routes.
Par défaut,withRoutes
est valué àtrue
.
Mettre--withRoutes=false
pour désactiver cette option.
Note: L'utilisation dewithConfig
est obligatoire à l'utilisation de l'optionwithRoutes
.
# Retour
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné.
# Exemple
Création d'un module
Test Anakeen
:
npx @anakeen/anakeen-cli create
Résultat :
? path to the package : ./Test/
? vendor name of the module : Test Anakeen
? namespace (if void the namespace is equal to the vendorName) :
? name of the module : Test
? add path for smart structure : Yes
? add config path and xml files for routes : Yes
? add public path : Yes
? add path and files for accounts : Yes
? add path and php file for autocompletion : Yes
? add path and files for enumerates : Yes
? add path and files for settings : Yes
? add php file example for route : Yes
[9/6/2019] [11:18:13 AM] › ▶ create Initialized timer...
[9/6/2019] [11:18:13 AM] › ◼ create Timer run for: 41ms
[9/6/2019] [11:18:13 AM] › ✔ success create done
# createRoute
La commande createRoute
permet de créer et d'ajouter une route à un fichier de configuration déjà existant.
# Arguments
name (string)
Nom de la route.
Alias :-n
.callable (string)
Chemin d'accès au fichier PHP appelé.
Alias:-c
.method (string)
Méthode utilisée par la route (
GET
,POST
,PUT
,DELETE
).
Alias :-m
.pattern (string)
Modèle validant la route (exemple:
/api/v2/test/) Alias :
-p`description (string)
Description de la route
access (string)
Nom du droit d'accès à la route.
Note: L'utilisation deaccess
implique l'utilisation de l'option `accessNameSpace.accessNameSpace (string)
Nom de l'espace de nommage des droits d'accès.
Note: L'uilisation deaccessNameSpace
implique l'utilisation de l'optionaccess
.sourcePath (string)
Chemin d'accès au module.
Par défaut,sourcePath
est valué à.
.
Alias :s
.
Note : Retourne une erreur dans le cas où le chemin d'accès n'est pas un dossier.routeConfigPath (string)
Chemin d'accès au fichier de configuration de route dans lequel est ajouté la nouvelle.
type (string)
Type de route utilisée (
routes
,middleware
,overrides
)
Par défaut,type
est valué àroutes
.priority (number)
Priorité de la route utilisée par les
middlewares
.
Par défaut,priority
est valué à1
.
# Retour
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné.
# Exemple
- Création d'une route dans
Anakeen Test
npx @anakeen/anakeen-cli createRoute -n Test -p "/api/v2/test/create-route/" -m GET -c "TestAnakeen\Test\Routes\Main" --access "TestAccess" --accessNameSpace "TestAccessRoutes" --routeConfigPath ./Test/src/vendor/Test\ Anakeen/Test/Config/110-TestRoutes.xml --type routes -s ./Test/
- Résultat : fichier
110-TestRoutes.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sde:config xmlns:sde="https://platform.anakeen.com/4/schemas/sde/1.0">
<sde:routes namespace="Test Anakeen">
<sde:route name="TestMain">
<sde:callable>Test Anakeen\Test\Routes\Main</sde:callable>
<sde:method>GET</sde:method>
<sde:pattern>/Test/main</sde:pattern>
<sde:description>A route example for Test</sde:description>
</sde:route>
<sde:route name="Test">
<sde:callable>TestAnakeen\Test\Routes\Main</sde:callable>
<sde:method>GET</sde:method>
<sde:pattern>/api/v2/test/create-route/</sde:pattern>
<sde:description/>
<sde:requiredAccess>
<sde:access ns="TestAccessRoutes">TestAccess</sde:access>
</sde:requiredAccess>
</sde:route>
</sde:routes>
<sde:accesses namespace="Test Anakeen"/>
</sde:config>
- Résultat : fichier
Main.php
<?php
namespace My;
use Anakeen\SmartElement;
use Anakeen\SmartElementManager;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class Test
{
protected $viewIdentifier;
protected $docid;
/** @var SmartElement */
protected $document;
/**
* @param Request $request
* @param Response $response
* @param callable $next
* @param array $args
* @return mixed
* @throws \Anakeen\Core\DocManager\Exception
*/
public function __invoke(Request $request, Response $response, callable $next, array $args = [])
{
$this->initParameters($args, $request);
$request = $this->doRequest($request);
return $next($request, $response);
}
/**
* @param $args
* @param Request $request
* @throws \Anakeen\Core\DocManager\Exception
*/
protected function initParameters($args, Request $request)
{
//TO DO
}
protected function doRequest(Request $request)
{
// TO DO
return $request;
}
}
# createSetting
La commande createSetting
permet de créer et d'ajouter un paramétrage au module.
# Arguments
sourcePath (string)
Chemin d'accès au module.
Par défaut,sourcePath
est valué à.
.
Alias :s
.
Note : Retourne une erreur dans le cas où le chemin d'accès n'est pas un dossier.type (string)
Type de paramétrage à créer (
Masks
,ViewControl
,FieldAccess
,Profile
,MailTemplate
,Timer
,Exec
,HelpPage
,Enumerate
).
Alias : aucun.
Note : Retourne une erreur dans le cas où le type utilisé ne fait pas partie de la liste.associatedSmartStructure (string)
Nom de la Smart Structure associée.
Alias:-S
.
En conflit avecassociatedWorkflow
.
Note : Si le paramétrage est global,associatedSmartStructure
doit être vide.associatedWorkflow (string)
Nom du cycle de vie associé.
Alias :-W
.
En conflit avecassociatedSmartStructure
.
Note : Si le paramétrage est global,associatedWorkflow
doit être vide.vendorName (string)
Nom de l'organisation fournissant le module.
Alias :-v
.
Note: Le nom de l'organisation doit être exclusivement formé de caractères alphanumériques.moduleName (string)
Nom du module.
Alias:-m
.
Note: Le nom du module doit être exclusivement formé de caractères alphanumériques.name (string)
Nom du paramétrage.
Par défaut,name
est valué à{nom du module}{nom de la Smart Structure | nom du cycle de vie | "" }{type}
si les informations du module sont disponibles, vide sinon.
Alias:-n
.settingPath (string)
Chemin d'accès vers le répertoire où le fichier de paramétrage sera ajouté
Alias : aucun.
Note : Une erreur est retournée si le chemin n'existe pas ou n'est pas trouvé.settingFileName (string)
Nom du fichier de paramétrage
Alias : aucun.
Note : Par défaut,settingFileName
reprend le nom du paramétrage (i.e.{nom du module}{nom de la Smart Structure | nom du cycle de vie | ""}{type}
ou vide si les informations du module ne sont pas disponibles).
# Retour
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné.
# Exemple
- Création d'un paramétrage de modèle de mail :
npx @anakeen/anakeen-cli createSetting
? path to the info.xml directory : ./Test
? type of the setting : Mail Template
? name of the associated smart structure (empty if setting is global) :
? name of the associated workflow (empty if setting is global) :
? vendor name of the module : Test Anakeen
? name of the module : Test
? name of the setting : TestMailTemplate
? path where the smart structure will be added : ./Test/src/vendor/Test Anakeen/Test/Settings
? add a directory for the new setting (not compatible with settingPath) : Yes
[9/9/2019] [4:20:22 PM] › ▶ createSetting Initialized timer...
[9/9/2019] [4:20:23 PM] › ◼ createSetting Timer run for: 45ms
[9/9/2019] [4:20:23 PM] › ✔ success createSetting done
- Résultat: fichier
250-MailTemplateTestMailTemplate.xml
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:mail="https://platform.anakeen.com/4/schemas/mailtemplate/1.0">
<mail:mailtemplate xmlns:mail="https://platform.anakeen.com/4/schemas/mailtemplate/1.0" name="TESTMAILTEMPLATE" structure="MY_STRUCTURE" label="Test Mail Template" >
<mail:from>
<!--
<mail:config-parameter ns="NAMESPACE" label="Expéditeur">ACCOUNT_SENDER</mail:config-parameter>
-->
</mail:from>
<mail:recipients>
<!--
<mail:recipient dest="to">
<mail:element-account-field label="Destinataire">person_recipient</mail:element-account-field>
</mail:recipient>
-->
</mail:recipients>
<mail:subject>[Test] Mail sample</mail:subject>
<mail:body content-type="html"><![CDATA[<p>Bonjour,<br /><br />Ce mail est un exemple]]></mail:body>
</mail:mailtemplate>
</smart:config>
# createSmartStructure
La commande createSmartStructure
permet de créer le fichier de configuration d'une Smart Structure.
# Arguments
sourcePath (string)
Chemin d'accès au module.
Par défaut,sourcePath
est valué à.
.
Alias :s
.
Note : Retourne une erreur dans le cas où le chemin d'accès n'est pas un dossier.name (string)
Nom de la Smart Structure.
Alias :-n
.
Note: Le nom de la Smart Structure doit être exclusivement formé de caractères alphanumériques.vendorName (string)
Nom de l'organisation fournissant le module.
Alias :-v
.
Note: Le nom de l'organisation doit être exclusivement formé de caractères alphanumériques.moduleName (string)
Nom du module.
Alias:-m
.
Note: Le nom du module doit être exclusivement formé de caractères alphanumériques.parentName (string)
Nom de la Smart Structure parente.
Alias :-p
. Note: Le nom de la Smart Structure parente doit être exclusivement formé de caractères alphanumériques.smartStructurePath (string)
Chemin d'accès vers le dossier où la Smart Structure sera ajoutée. Par défaut,
smartStructurePath
est valué au chemin d'accès par défaut si les informations du module sont disponibles.
Alias : aucun.
Note : Une erreur est retournée si le chemin n'existe pas ou n'est pas trouvé.inselfDirectory (boolean)
Ajoute un dossier pour la nouvelle Smart Structure (incompatible avec
smartStructurePath
).
Par défaut,inselfDirectory
est valué àtrue
.
Alias : aucun.withRender (boolean)
Indique l'ajout d'une classe de rendu pour la Smart Structure.
Par défaut,withRender
est valué àtrue
.
Alias : aucun.withParameters (boolean)
Indique l'ajout de paramètres dans la Smart Structure.
Par défaut,withParameters
est valué àtrue
.
Alias : aucun.withBehavior (boolean)
Indique l'ajout d'une classe de comportement pour la Smart Structure.
Par défaut,withBehavior
est valué àtrue
.
Alias : aucun.withSettings (boolean)
Indique l'ajout de fichier de paramétrage pour la Smart Structure.
Par défaut,withSettings
est valué àtrue
.
Alias : aucun.withAutocompletion (boolean)
Indique l'ajout d'une classe d'autocomplétion.
Par défaut,withAutocompletion
est valué àtrue
.
Alias : aucun.insertIntoInfo (boolean)
Indique l'insertion de la commande d'installation de la Smart Structure dans le fichier
info.xml
.
Par défaut,insertIntoInfo
est valué àtrue
.
Alias : aucun.
# Retour
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné.
# Exemple
- Création d'une Smart Structure
DEVTEST
avec ajout de tous les fichiers de paramétrage:
npx @anakeen/anakeen-cli createSmartStructure
? path to the info.xml directory : ./Test
? name of the smart structure : DEVTEST
? vendor name of the module : Test Anakeen
? name of the module : Test
? parent name of the smartStructure :
? path where the smart structure will be added : ./Test/src/vendor/Test Anakeen/Test/SmartStructures
? add a directory for the new smart structure (not compatible with smartStructurePath) : Yes
? add renders class : Yes
? add parameters : Yes
? add a class behavior : Yes
? add settings : Yes
? add an autocompletion : Yes
? Insert into info.xml : Yes
[9/10/2019] [2:15:08 PM] › ▶ createSmartStructure Initialized timer...
[9/10/2019] [2:15:08 PM] › ◼ createSmartStructure Timer run for: 84ms
[9/10/2019] [2:15:08 PM] › ✔ success createSmartStructure done
- Résultat : fichier
100-DevtestStructure.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="DEVTEST">
<smart:icon file="devtest.png"/>
<smart:class>Test Anakeen\Test\SmartStructures\Devtest\DevtestBehavior</smart:class>
<smart:fields/>
<smart:hooks/>
<smart:defaults/>
</smart:structure-configuration>
</smart:config>
# createWorkflow
La commande createWorkflow
permet de créer le fichier de configuration d'un cycle de vie.
# Arguments
sourcePath (string)
Chemin d'accès au module.
Par défaut,sourcePath
est valué à.
.
Alias :s
.
Note : Retourne une erreur dans le cas où le chemin d'accès n'est pas un dossier.smartStructureName (string)
Nom de la Smart Structure cycle de vie.
Alias :-n
.
Note: Le nom du cycle de vie doit être exclusivement formé de caractères alphanumériques.vendorName (string)
Nom de l'organisation fournissant le module.
Alias :-v
.
Note: Le nom de l'organisation doit être exclusivement formé de caractères alphanumériques.
moduleName (string)
Nom du module.
Alias:-m
.
Note: Le nom du module doit être exclusivement formé de caractères alphanumériques.
parentName (string)
Nom parent du modèle de cycle de vie.
Alias :-p
. Note: Le nom du parent doit être exclusivement formé de caractères alphanumériques.smartElementName (string)
Nom du Smart Element cycle de vie.
Alias :-e
. Note: Le nom du Smart Element doit être exclusivement formé de caractères alphanumériques.associatedSmartStructure (string)
Nom de la Smart Structure liée au cycle de vie.
Alias :-S
.workflowPath (string)
Chemin d'accès au fichier où sera ajouté le cycle de vie.
Alias : aucun.
Note : Une erreur est retournée si le chemin n'existe pas ou n'est pas trouvé.inselfDirectory (boolean)
Ajoute un dossier pour le nouveau cycle de vie (incompatible avec
workflowPath
).
Par défaut,inselfDirectory
est valué àtrue
.
Alias : aucun.withParameters (boolean)
Indique l'ajout de paramètres dans le cycle de vie.
Par défaut,withParameters
est valué àtrue
.
Alias : aucun.withBehavior (boolean)
Indique l'ajout d'une classe de comportement pour le cycle de vie.
Par défaut,withBehavior
est valué àtrue
.
Alias : aucun.noCreateSmartStructure (boolean)
Indique si la Smart Structure doit être créée ou non.
Par défaut,noCreateSmartStructure
est valué àfalse
.
Alias : aucun.
# Retour
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné.
# Exemple
- Création d'un cycle de vie
WflTest
:
npx @anakeen/anakeen-cli createWorkflow
? path to the info.xml directory : ./Test
? vendor name of the module : Test Anakeen
? name of the module : Test
? workflow smart structure name : WFLTEST
? parent name of the workflow model :
? workflow smart element name : WFLELMTEST
? name of the associated smart structure : DEVTEST
? path where the workflow will be added : ./Test/src/vendor/Test Anakeen/Test/SmartStructures/Devtest
? add a directory for the new workflow (not compatible with workflowPath) : Yes
? add parameters : Yes
? add a class behavior : Yes
? disable the creation of the SS : Yes
[9/10/2019] [5:15:38 PM] › ▶ createWorkflow Initialized timer...
[9/10/2019] [5:15:38 PM] › ◼ createWorkflow Timer run for: 57ms
[9/10/2019] [5:15:38 PM] › ✔ success createWorkflow done
- Résultat : fichier
510-WflelmtestWorkflowSettings.xml
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!--Timer and Mail templates workflow references-->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<workflow:config xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0" name="WFLELMTEST" structure="DEVTEST" model="WFLTEST">
<workflow:steps/>
<workflow:transitions/>
</workflow:config>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!--Elements (color, cvdoc, masks) user interface referenced in workflow-->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<workflow:config xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0" name="WFLELMTEST" structure="DEVTEST" model="WFLTEST">
<workflow:steps>
<workflow:step ref="WFLTEST_E1">
<workflow:color>#00CE01</workflow:color>
</workflow:step>
<workflow:step ref="WFLTEST_E2">
<workflow:color>#FF4249</workflow:color>
</workflow:step>
</workflow:steps>
</workflow:config>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!--Default workflow for the structure-->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<smart:structure-configuration name="DEVTEST">
<smart:default-workflow ref="WFLELMTEST"/>
</smart:structure-configuration>
</smart:config>
- fichier
140-WflelmtestWorkflowAccess.xml
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
<workflow:config xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0" name="WFLELMTEST" structure="DEVTEST" model="WFLTEST">
<workflow:steps/>
</workflow:config>
</smart:config>
- fichier
130-WflelmtestWorkflowPermissions.xml
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!--Step Element Accesses of workflow: profile and field accesses reference-->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<workflow:config xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0" name="WFLELMTEST" structure="DEVTEST" model="WFLTEST">
<workflow:steps/>
</workflow:config>
</smart:config>
# deleteSmartStructure
La commande deleteSmartStructure
permet de supprimer une Smart Structure du contexte.
Avertissements
La suppression d'une Smart Structure n'entraîne pas la suppression des Smart Structures héritant de celle supprimée.
# Arguments
name (string)
Nom de la Smart Structure à supprimer.
Alias :-n
.contextUsername (string)
Identifiant utilisateur d'accès au contexte.
Alias :-u
.contextPassword (string)
Mot de passe lié à l'identifiant utilisateur d'accès au contexte.
Alias :-p
.contextUrl (string)
URL d'accès au contexte.
Alias :-c
.byPass (boolean)
Indique le contournement des messages de confirmation.
Par défaut,byPass
est valué àfalse
.
# Retour
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné.
Avertissements
Les Smart Structures descendantes de la Smart Structure à supprimer doivent être supprimées avant celle-ci.
# Exemple
- Suppression de la Smart Structure
DEVTEST
du contexte local.
npx @anakeen/anakeen-cli deleteSmartStructure -n DEVTEST -u admin -p ******* -c http://localhost:9000/control --byPass
- Résultat :
[9/10/2019] [5:17:38 PM] › ▶ deleteSmartStructure Initialized timer...
[9/10/2019] [5:17:38 PM] › ◼ deleteSmartStructure Timer run for: 57ms
[9/10/2019] [5:17:38 PM] › ✔ success deleteSmartStructure done
# deploy
La commande deploy
permet de déployer sur le contexte un fichier .app
.
# Arguments
appPath (string)
Chemin d'accès vers le fichier
.app
à déployer.
Alias :-t
.
Note : Une erreur est retournée si le fichier n'est pas trouvé ou n'existe pas.sourcePath (string)
Chemin d'accès au module.
Alias :s
.
Note : Retourne une erreur dans le cas où le chemin d'accès n'est pas un dossier.
autoRelease (string)
Préfixe de la version mineure avec ajout d'horodatage.
Par défaut,autoRelease
est valué àdev
.
Alias : aucun.
Note: l'utilisation deautoRelease
implique que l'option sourcePath est utilisée.reinstall (boolean)
Permet de forcer une reinstallation dans le cas où un module est déjà installé.
Cela execute les sections pre-install et post-install au lieu des sections pre-update et post-update.
# Retour
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné.
# Exemple
- Déploiement du fichier
admin-center-2.0.1-dev20190820085740.app
:
npx @anakeen/anakeen-cli deploy -t ../build/admin-center/admin-center-2.0.1-dev20190820085740.app -c http://localhost:9000/control -u admin -p ****** -s .
- Résultat:
[9/10/2019] [5:48:13 PM] › ▶ deploy Initialized timer...
[9/10/2019] [5:48:13 PM] › ℹ info source mode
[build] › ℹ info Generate admin-center-2.0.1-dev20190910154814.app
[build] › ℹ info Version 2.0.1-dev20190910154814
[deploy] › ℹ info Check control connexion
[deploy] › ℹ info Post the module
[deploy] › … awaiting Upload module to the server
[9/10/2019] [5:48:14 PM] › ◼ deploy Timer run for: 708ms
[9/10/2019] [5:48:15 PM] › ✔ success deploy done
# extractPo
La commande extractPo
permet d'extraire les clés contenues dans les fonctions ___
(php/js).
Note
Si le fichier .po
n'existe pas alors la commande génère le fichier, sinon elle le met à jour.
Elle permet aussi l'extraction dans les fichiers VueJS, en parsant les méthodes utilisant la fonction $t
fourni par
le module vue-i18n.
Les fichiers à parser sont indiqués dans le fichier xml build.xml
# Arguments
sourcePath (string)
Chemin d'accès au module.
Alias :s
.
Note : Retourne une erreur dans le cas où le chemin d'accès n'est pas un dossier.
- verbose (boolean)
Indique l'ajout du mode verbose (informations supplémentaires).
Par défaut,verbose
est valué àfalse
.
Alias :-v
.
# Retour
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné.
# Exemple
- Extraction des po de
admin-center
:
npx @anakeen/anakeen-cli extractPo -s ./admin-center/ -v
- Résultat :
[9/10/2019] [5:56:21 PM] › ▶ po Initialized timer...
[po] › ℹ info No smart element to extract
[po] › ℹ info No enum to extract
[po] › ℹ info No view control to extract
[po] › ℹ info No workflow to extract
[po] › ℹ info No mustache template to extract
[po] › ℹ info No JS glob
[po] › ℹ info Extract JS
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterAccounts/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterI18n/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterMail/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterParameters/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterVaultManager/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterWorkflow/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AuthenticationTokensHub/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/setup.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterAccounts/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterI18n/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterMail/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterParameters/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterVaultManager/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AdminCenterWorkflow/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/IHM/HubComponent/AuthenticationTokensHub/index.js : ✓
[po] › ℹ info Analyze : admin-center/src/vendor/Anakeen/AdminCenter/setup.js : ✓
[9/10/2019] [5:56:21 PM] › ◼ po Timer run for: 135ms
[9/10/2019] [5:56:21 PM] › ✔ success po done
# generateStubs
Lors de l'enregistrement de Smart Structure sur le serveur, des classes PHP associées à cette structure sont générées.
Elles représentent l'héritage et le comportement ainsi que la définition des Smart Fields
définie dans la structure. La commande generateStubs
permet de générer différents fichiers pour extraire des
constantes depuis les fichiers xml de configuration.
# Constantes de Smart Fields en javascript
Cette commande permet aussi de générer les constantes pour les smart Fields en javascript. Un seul fichier javascript est généré au format module.
La génération est activée si le fichier build.xml
contient la balise stub-struct-js-config
. L'attribut target
indique le chemin de production du fichier javascript généré.
Si votre application déclare des Smart Structures qui héritent de Smart Structure qui sont en dehors de votre module, il
est nécessaire d'indiquer les fichiers javascript des constantes de ses modules. Ceci est décrit par la balise
stub-js-import
. L'attribut name
est le nom de la variable javascript utilisé par l'importation. L'attribut source
est le chemin du fichier javascript à importer. La source peut être un chemin vers le fichier physique ou une référence
de fichier d'un node_module.
Anakeen Platform produits les fichiers "constantes" suivants :
@anakeen/smart-data-engine/constants/smartStructureFields.js
@anakeen/security/constants/smartStructureFields.js
@anakeen/user-interfaces/constants/smartStructureFields.js
@anakeen/workflow/constants/smartStructureFields.js
@anakeen/business-app/constants/smartStructureFields.js
@anakeen/hub-station/constants/smartStructureFields.js
# Constantes de workflow
La génération des constantes pour les graphes de cycle de vie est réalisée si les balises
stub-workflow
sont indiqués dans le fichier build.xml
. L'attribut source
(format
glob permet d'indiquer le chemin des fichiers xml de définition des graphes. Un
fichier PHP et un fichier JS sont générés par fichier xml de graphes. Ils sont placés dans le même répertoire que le
fichier xml. Le nom des fichiers produits sont basés sur les nom des fichiers xml en changeant leur extension.
# Constante d'énumérés
La génération des constantes pour les champs enuméré est réalisée si les balises
stub-enumerate
sont indiqués dans le fichier build.xml
. L'attribut source
(format
glob permet d'indiquer le chemin des fichiers xml de définition des énumérés. Un
fichier PHP et un fichier JS sont générés par énuméré. Ils sont placés dans le même répertoire que le fichier xml. Leur
nom de fichier est le nom de l'énuméré.
Attention
Les éléments des énumérés sont des valeurs qui ne peuvent pas toujours être convertis en constante. Seuls les valeurs
d'énumérés composés de lettre et de chiffre (pattern ^[\p{L}_][\p{L}0-9_]*
seront pris en compte dans la génération.
# Arguments
sourcePath (string)
Chemin d'accès au module.
Par défaut,sourcePath
est valué à.
.
Alias :s
.
Note : Retourne une erreur dans le cas où le chemin d'accès n'est pas un dossier.targetPath (string)
Chemin cible de la génération des bouchons de code.
Par défaut,targetPath
est valué à./stubs
.
Alias :-t
.verbose (boolean)
Indique l'ajout du mode verbose (informations supplémentaires). Affichage des fichiers inspectés et des fichiers produits
Par défaut,verbose
est valué àfalse
.
Alias :-v
.
# Retour
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné.
# Exemple
Soit le fichier de configuration suivant :
<?xml version="1.0" ?>
<module:config xmlns:module="https://platform.anakeen.com/4/schemas/module/1.0">
<module:source path="src"/>
<module:stub-config>
<module:stub-struct source="src/vendor/MyCompany/MyProject/SmartStructures/**/*Structure.xml"/>
<module:stub-workflow source="src/vendor/MyCompany/MyProject/SmartStructures/**/*Graph.xml"/>
<module:stub-enumerate source="src/vendor/MyCompany/MyProject/Enumerates/*Enumerate.xml"/>
<module:stub-struct-js-config target="./src/vendor/MyCompany/MyProject/MyCompany.js">
<module:stub-js-import name="SdeFields" source="@anakeen/smart-data-engine/constants/smartStructureFields.js"/>
<module:stub-js-import name="Wfl" source="@anakeen/workflow/constants/smartStructureFields.js"/>
<module:stub-js-import name="Hub" source="@anakeen/hub-components/constants/smartStructureFields.js"/>
</module:stub-struct-js-config>
</module:stub-config>
</module:config>
# Exemple pour les smart fields :
Soit le fichier de structure suivant :
<?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="DEVBILL" label="Bill">
<smart:class>Anakeen\SmartStructures\Devbill\DevbillBehavior</smart:class>
<smart:fields>
<smart:field-set name="bill_fr_ident" type="frame" access="ReadWrite" label="Identification">
<smart:field-text name="bill_title" is-title="true" access="ReadWrite" label="Title"/>
<smart:field-longtext name="bill_content" access="ReadWrite" label="Description"/>
<smart:field-docid name="bill_author" relation="DEVPERSON" access="ReadWrite" label="Author"/>
<smart:field-text name="bill_author_display" is-title="true" access="Read"/>
<smart:field-date name="bill_billdate" access="ReadWrite" label="Bill date"/>
<smart:field-text name="bill_location" access="Read" label="City"/>
<smart:field-docid name="bill_clients" relation="DEVCLIENT" access="ReadWrite" multiple="true" label="Clients"/>
<smart:field-set name="bill_otherclients" type="array" access="ReadWrite" label="Other clients">
<smart:field-text name="bill_clientname" access="ReadWrite" label="Client name"/>
<smart:field-text name="bill_society" access="Read" label="Enterprise"/>
</smart:field-set>
<smart:field-money name="bill_cost" access="ReadWrite" label="Cost"/>
</smart:field-set>
</smart:fields>
</smart:structure-configuration>
</smart:config>
Cela produit les 2 fichiers suivant pour les champs.
Fichier PHP Stub : `stubs/DEV_BILL__STUB.php`
<?php
namespace SmartStructure {
class Devbill extends \Anakeen\SmartStructures\Devbill\DevbillBehavior
{
const familyName = "DEVBILL";
}
}
namespace SmartStructure\Fields {
class Devbill
{
/**
* Identification
* <ul>
* <li> <i>type</i> frame </li>
* <li> <i>access</i> ReadWrite </li>
* </ul>
*/
const bill_fr_ident = 'bill_fr_ident';
/**
* Title
* <ul>
* <li> <i>is-title</i> true </li>
* <li> <i>access</i> ReadWrite </li>
* <li> <i>type</i> text </li>
* </ul>
*/
const bill_title = 'bill_title';
/**
* <ul>
* <li> <i>is-title</i> true </li>
* <li> <i>access</i> Read </li>
* <li> <i>type</i> text </li>
* </ul>
*/
const bill_author_display = 'bill_author_display';
/**
* City
* <ul>
* <li> <i>access</i> Read </li>
* <li> <i>type</i> text </li>
* </ul>
*/
const bill_location = 'bill_location';
/**
* Description
* <ul>
* <li> <i>access</i> ReadWrite </li>
* <li> <i>type</i> longtext </li>
* </ul>
*/
const bill_content = 'bill_content';
/**
* Author
* <ul>
* <li> <i>relation</i> DEVPERSON </li>
* <li> <i>access</i> ReadWrite </li>
* <li> <i>type</i> docid </li>
* </ul>
*/
const bill_author = 'bill_author';
/**
* Clients
* <ul>
* <li> <i>relation</i> DEVCLIENT </li>
* <li> <i>access</i> ReadWrite </li>
* <li> <i>multiple</i> true </li>
* <li> <i>type</i> docid </li>
* </ul>
*/
const bill_clients = 'bill_clients';
/**
* Bill date
* <ul>
* <li> <i>access</i> ReadWrite </li>
* <li> <i>type</i> date </li>
* </ul>
*/
const bill_billdate = 'bill_billdate';
/**
* Other clients
* <ul>
* <li> <i>type</i> array </li>
* <li> <i>access</i> ReadWrite </li>
* </ul>
*/
const bill_otherclients = 'bill_otherclients';
/**
* Client name
* <ul>
* <li> <i>access</i> ReadWrite </li>
* <li> <i>type</i> text </li>
* </ul>
*/
const bill_clientname = 'bill_clientname';
/**
* Enterprise
* <ul>
* <li> <i>access</i> Read </li>
* <li> <i>type</i> text </li>
* </ul>
*/
const bill_society = 'bill_society';
/**
* Cost
* <ul>
* <li> <i>access</i> ReadWrite </li>
* <li> <i>type</i> money </li>
* </ul>
*/
const bill_cost = 'bill_cost';
}
}
Fichier JS : `src/vendor/MyCompany/MyProject/MyCompany.js`
/* Smart Fields Constants */
export class DEVBILL {
/**
* Identification
* @smartType frame
*/
static bill_fr_ident = "bill_fr_ident";
/**
* Title
* @smartType text
*/
static bill_title = "bill_title";
/**
*
* @smartType text
*/
static bill_author_display = "bill_author_display";
/**
* City
* @smartType text
*/
static bill_location = "bill_location";
/**
* Description
* @smartType longtext
*/
static bill_content = "bill_content";
/**
* Author
* @smartType docid DEVPERSON
*/
static bill_author = "bill_author";
/**
* Clients
* @smartType docid DEVCLIENT
*/
static bill_clients = "bill_clients";
/**
* Bill date
* @smartType date
*/
static bill_billdate = "bill_billdate";
/**
* Other clients
* @smartType array
*/
static bill_otherclients = "bill_otherclients";
/**
* Client name
* @smartType text
*/
static bill_clientname = "bill_clientname";
/**
* Enterprise
* @smartType text
*/
static bill_society = "bill_society";
/**
* Cost
* @smartType money
*/
static bill_cost = "bill_cost";
}
export class DEVCLIENT {
/**
* Identification
* @smartType frame
*/
static client_fr_ident = "client_fr_ident";
//....
}
export class DEVNOTE {
/**
* Identification
* @smartType frame
*/
static note_fr_ident = "note_fr_ident";
//....
}
export class DEVPERSON {
/**
*
* @smartType frame
*/
static dev_fr_ident = "dev_fr_ident";
/**
* Title
* @smartType text
*/
//....
}
# Exemple pour les graphes de workflow :
Soit le graphe suivant : 2 étapes une transition. : vendor/MyCompany/MyProject/Workflow/WbillGraph.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
<workflow:graph ns="GDC" name="WFAM_BILL">
<workflow:steps>
<workflow:step name="wfam_bill_e1" state-label="Initial" initial="true"/>
<workflow:step name="wfam_bill_e2" state-label="Final"/>
</workflow:steps>
<workflow:transitions>
<workflow:transition name="t_wfam_bill_e1_e2" from="wfam_bill_e1" to="wfam_bill_e2" label="Transition initial final"/>
</workflow:transitions>
</workflow:graph>
</smart:config>
Fichier PHP Stub : `vendor/MyCompany/MyProject/Workflow/WbillGraph.php`
<?php
/**
*
* @name: WFAM_BILL
* @ns: GDC
*/
namespace MyCompany\MyProject\Workflow;
class WbillGraph
{
// Steps
/**
* Initial
* @initialStep : true
*/
const step_wfam_bill_e1 = "wfam_bill_e1";
/**
* Final
*/
const step_wfam_bill_e2 = "wfam_bill_e2";
// Transitions
/**
* Transition initial final
* @from : wfam_bill_e1 "Initial"
* @to : wfam_bill_e2 "Final"
*/
const transition_t_wfam_bill_e1_e2 = "t_wfam_bill_e1_e2";
}
Fichier JS: `vendor/MyCompany/MyProject/Workflow/WbillGraph.js`
/* constants */
export default class WbillGraph {
// Steps
/**
* Initial
* @initialStep : true
*/
static step_wfam_bill_e1 = "wfam_bill_e1";
/**
* Final
*/
static step_wfam_bill_e2 = "wfam_bill_e2";
// Transitions
/**
* Transition initial final
* @from : wfam_bill_e1 "Initial"
* @to : wfam_bill_e2 "Final"
*/
static transition_t_wfam_bill_e1_e2 = "t_wfam_bill_e1_e2";
}
# Exemple pour les énumérés :
Soit l'énuméré suivant : vendor/MyCompany/MyProject/Enum/note.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="notelevel" extendable="true" >
<smart:enum name="internal" label="Internal note"/>
<smart:enum name="confidential" label="Confidential note"/>
</smart:enum-configuration>
</smart:enumerates>
</smart:config>
Fichier PHP Stub : `vendor/MyCompany/MyProject/Enum/note.php`
<?php
/**
* Enumerate constants
* @name: notelevel
*/
namespace MyCompany\MyProject\Enum;
class notelevel
{
/** @var string Internal note */
const internal = "internal";
/** @var string Confidential note */
const confidential = "confidential";
}
Fichier JS: `vendor/MyCompany/MyProject/Enum/note.js`
/**
* Enumerate constants
* @name: notelevel
*/
export default class notelevel {
/** Internal note */
static internal = "internal";
/** Confidential note */
static confidential = "confidential";
}
# generateInstaller
La commande generateInstaller
permet de générer un control contenant le repository local, il est directement livrable
pour faire une installation ou une mise à jour.
Le control se base sur le fichier package.json
. Il est généré sous la forme d'un fichier zip contenant un README.md
avec les instructions d'installation.
# Arguments
localRepoName (string)
Emplacement du repository local dans le zip généré Par défaut :
control/localRepo
controlTarget (string)
Emplacement où le zip est généré Par défaut :
./control.zip
installDevDependencies (boolean)
Indique si l'on génère l'installeur avec ou sans les modules de développement. Par défaut:
false
. Alias:--dev
.addLocalApp (string)
Glob vers un ou plusieurs app local à ajouter au livrable
customReadme (string)
Emplacement vers un template de fichier README en mustache, si le template est présent alors il est intégré dans le control.zip à la racine. La clef qui est remplacée est
path
. Par défaut :""
debug (boolean)
Passe la commande en mode verbose.
Par défaut,debug
est valué àfalse
.
Alias :-d
.cwd (string)
Permet d'indiquer le chemin vers le répertoire du projet, contenant le fichier
package.json
Par défaut,./
.
# Exemple
Génération d'un installeur pour les éléments en cours
npx @anakeen/anakeen-cli generateInstaller
# deployConfiguration
La commande deployConfiguration
permet de déployer sur le contexte, un fichier de configuration .xml
.
# Arguments
noCheck (boolean)
Indique la vérification de la validation du fichier de configuration
.xml
.
Par défaut,noCheck
est valué àfalse
.
Alias : aucun.sourcePath (string)
Chemin du fichier XML de configuration.
Alias :-s
.
En conflit avecglob
.
Note Une erreur est retournée si le fichier n'est pas trouvé ou n'existe pas.glob (string)
Instruction glob des fichiers de configuration.
Alias :-g
.
En conflit avecsourcePath
.sourceDir (string)
Chemin du répertoire source pour la configuration glob.
Alias : aucun.
Note : Une erreur est retournée si le répertoire n'est pas trouvé ou n'existe pas.verbose (boolean)
Indique à la commande d'afficher plus d'informations de log.
Par défaut,verbose
est valué àfalse
.
Alias :-v
.dryRun (boolean)
Indique à la commande d'effectuer une phase de test afin d'éviter de potentielle erreurs.
Par défaut,dryRun
est valué àfalse
.
Alias :-d
.contextUsername (string)
Identifiant utilisateur d'accès au contexte.
Alias :-u
.contextPassword (string)
Mot de passe lié à l'identifiant utilisateur d'accès au contexte.
Alias :-p
.contextUrl (string)
URL d'accès au contexte.
Alias :-c
.includeFiles (string)
Instruction glob des fichiers à inclure au déploiement.
Alias:-f
.
Note: L'instruction glob, si relative, est relative ausourcePath
en mode déploiement de fichier, et est relative àsourceDir
en mode glob.
Ces fichiers sont zippés pour être envoyé au serveur qui traitera leur déploiements.
Le serveur extrait les fichiers du fichier zip et les place au chemin d'accès auxquels ils appartiennent localement.
# Retour
La commande affiche durant son exécution les informations liées aux options utilisées (ex: verbose
, dryRun
,
etc...).
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné (ex:
mauvais mot de passe/login, URL introuvable, etc...).
# Exemple
- Déploiement du fichier de configuration de routes
test.xml
endryRun
etverbose
mode :
npx @anakeen/anakeen-cli deployConfiguration -s ./admin-center/src/config/SmartDataEngine/AdminCenter/test.xml -c http://localhost:9000 -u admin -p ******* -d -v
- Résultat en cas de réussite:
[9/11/2019] [10:14:51 AM] › ▶ importConfiguration Initialized timer...
[9/11/2019] [10:14:51 AM] › ℹ info Dry run import mode
[9/11/2019] [10:14:51 AM] › ℹ info Verbose mode
[9/11/2019] [10:14:51 AM] › ℹ info Source file mode
[checkConfigFile] › ℹ info Analyze : ./admin-center/src/config/SmartDataEngine/AdminCenter/test.xml : ✓
[deploy] › ℹ info
[deploy] › ✔ success Deploy config file done
[9/11/2019] [10:14:51 AM] › ◼ importConfiguration Timer run for: 122ms
[9/11/2019] [10:14:51 AM] › ✔ success deploy configuration done
- Résultat en cas de
contextUserName
oucontextPassword
erroné :
[9/11/2019] [10:33:52 AM] › ▶ deployConfiguration Initialized timer...
[9/11/2019] [10:33:52 AM] › ℹ info Source file mode
[9/11/2019] [10:33:52 AM] › ◼ deployConfiguration Timer run for: 87ms
[9/11/2019] [10:33:52 AM] › ✖ error Error: 403 Forbidden : you should check the login and password Access not granted
at response.text.then.contentText (anakeen-platform-4/anakeen-cli/tasks/deployConfiguration.js:33:19)
at processTicksAndRejections (internal/process/next_tick.js:81:5)
- Résultat lorsque l'URL du contexte n'est pas trouvé :
[9/11/2019] [10:35:15 AM] › ▶ deployConfiguration Initialized timer...
[9/11/2019] [10:35:15 AM] › ℹ info Source file mode
[9/11/2019] [10:35:15 AM] › ◼ deployConfiguration Timer run for: 113ms
[9/11/2019] [10:35:15 AM] › ✖ error Error: 404 Not FoundPage not found
at response.text.then.contentText (anakeen-platform-4/anakeen-cli/tasks/deployConfiguration.js:37:17)
at processTicksAndRejections (internal/process/next_tick.js:81:5)
- Déploiement des fichiers de configuration dans
../admin-center/src/vendor/Anakeen/AdminCenter/Accounts/
endryRun
etverbose
mode, avecincludeFiles
:
npx @anakeen/anakeen-cli deployConfiguration -g ../admin-center/src/vendor/Anakeen/AdminCenter/Accounts/**/*.xml -c http://localhost:8080 -u admin -p anakeen -d -v -f ./admin-center/src/vendor/Anakeen/AdminCenter/test/**/*.php
› ▶ deployConfiguration Initialized timer...
› ℹ info Verbose mode
› ℹ info Glob file mode
› ℹ info With included files
[checkConfigFile] › ℹ info Analyze : /anakeen-platform-4/admin-center/src/vendor/Anakeen/AdminCenter/Accounts/110-AdminCenterRoles.xml : ✓
[checkConfigFile] › ℹ info Analyze : /anakeen-platform-4/admin-center/src/vendor/Anakeen/AdminCenter/Accounts/111-AdminManagerProfile.xml : ✓
[deploy] › ℹ info import file: /var/www/html/platform/vendor/Anakeen/AdminCenter/test/TestBehavior.php
[deploy] › ℹ info import file: /var/www/html/platform/vendor/Anakeen/AdminCenter/test/test2/TestBehavior.php
[deploy] › ℹ info [ORDER] prepare record order PDOC : dpdoc_famid
[DATA] update PRF_IUSER_OWNER (PDOC) : "User itself"
[ORDER] prepare record order CVDOC : dpdoc_famid
[DATA] update CV_IUSER_ACCOUNT (CVDOC) : "CV DOC IUSER"
[ORDER] prepare record order FIELDACCESSLAYERLIST : dpdoc_famid
[DATA] update FALL_IUSER (FIELDACCESSLAYERLIST) : "Admin User Field Access"
[PROFIL] change profil accesses for "PRF_ACCOUNTS_CREATION"
add access "create" for "account(accounts_manager_role)"
add access "icreate" for "account(accounts_manager_role)"
add access "create" for "account(system_administrator)"
add access "icreate" for "account(system_administrator)"
[PROFIL] change profil accesses for "PRF_ADMIN_CREATION"
add access "create" for "account(system_administrator)"
add access "icreate" for "account(system_administrator)"
[PROFIL] change profil accesses for "PRF_ADMIN_EDIT"
add access "view" for "account(system_administrator)"
add access "edit" for "account(system_administrator)"
[PROFIL] change profil accesses for "PRF_ADMIN_ACCESS"
add access "view" for "account(system_administrator)"
add access "edit" for "account(system_administrator)"
add access "delete" for "account(system_administrator)"
[PROFIL] change profil accesses for "PRF_IUSER_OWNER"
add access "view" for "account(accounts_manager_role)"
add access "edit" for "account(accounts_manager_role)"
add access "delete" for "account(accounts_manager_role)"
add access "view" for "account(system_administrator)"
add access "edit" for "account(system_administrator)"
add access "delete" for "account(system_administrator)"
[PROFIL] change profil accesses for "PRF_ADMIN_IGROUP"
add access "view" for "account(accounts_manager_role)"
add access "edit" for "account(accounts_manager_role)"
add access "delete" for "account(accounts_manager_role)"
add access "open" for "account(accounts_manager_role)"
add access "modify" for "account(accounts_manager_role)"
add access "view" for "account(system_administrator)"
add access "edit" for "account(system_administrator)"
add access "delete" for "account(system_administrator)"
add access "open" for "account(system_administrator)"
add access "modify" for "account(system_administrator)"
[PROFIL] change profil accesses for "CV_IUSER_ACCOUNT"
add access "EGROUP" for "account(accounts_manager_role)"
add access "EUSER" for "account(accounts_manager_role)"
add access "EGROUP" for "account(system_administrator)"
add access "EUSER" for "account(system_administrator)"
[PROFIL] change profil accesses for "FALL_IUSER"
add access "Identity" for "account(accounts_manager_role)"
add access "Password" for "account(accounts_manager_role)"
add access "Admin" for "account(accounts_manager_role)"
add access "Identity" for "account(system_administrator)"
add access "Password" for "account(system_administrator)"
[deploy] › ✔ success Deploy config file done
[1/27/2020] [9:30:11 AM] › ◼ deployConfiguration Timer run for: 1.08s
[1/27/2020] [9:30:11 AM] › ✔ success deploy configuration done
# openElement
La commande openElement
permet d'ouvrir à la page correspondante du centre de développement, un élément inscrit dans
un fichier XML.
Note
L'élément est défini en fonction de la ligne et de la colonne du fichier de configuration XML.
# Arguments
filePath (string)
Chemin d'accès vers le fichier de configuration XML.
Alias :-f
.
Note : Une erreur est retournée si le fichier source n'est pas trouvé ou n'existe pas.lineNumber (number)
Ligne à laquelle se trouvent les informations de l'élément dans le fichier de configuration XML. Alias :
-l
.columnNumber (number)
Colonne à laquelle se trouvent les informations de l'élément dans le fichier de configuration XML.
Alias :-c
.contextUrl (string)
URL d'accès au contexte.
Alias :-C
.
# Retour
Si une erreur survient lors de la commande, un message contenant les informations liées à l'erreur est retourné (ex: aucune valeur n'a été trouvée).
# Exemple
- Ouverture du Smart Element
MSK_DEVBILL
via le fichierDevbill.render.xml
:
npx @anakeen/anakeen-cli openElement -f ./dev-data/src/vendor/Anakeen/SmartStructures/Devbill/Devbill.render.xml -l 2 -c 26 -C http://localhost:9000
- Résultat :
[9/11/2019] [11:22:37 AM] › ✔ success Element mask has been open in your browser
Note
La page /devel/smartElements/?name=MSK_DEVBILL
s'ouvre dans le navigateur et trie la grille par nom logique
MSK_DEVBILL
.