# 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.
    Si autoRelease 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'option dev.

  • 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 est anakeen/repo.
  • --localSrc: string (Optional) : Le chemin vers le dossier qui contiendra les fichiers sources de vos modules. Par défaut, la valeur est anakeen/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 fichier repo.lock.xml. Par conséquent, la liste des modules à installer est prise depuis repo.lock.xml au lieu de repo.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 exemple security@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 avec glob.

  • glob (string)

    Instruction glob des fichiers de configuration.
    Alias : -g.
    En conflit avec sourcePath.

  • 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 de withConfig est obligatoire à l'utilisation de l'option withRoutes.

# 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 de access implique l'utilisation de l'option `accessNameSpace.

  • accessNameSpace (string)

    Nom de l'espace de nommage des droits d'accès.
    Note: L'uilisation de accessNameSpace implique l'utilisation de l'option access.

  • 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 avec associatedWorkflow.
    Note : Si le paramétrage est global, associatedSmartStructure doit être vide.

  • associatedWorkflow (string)

    Nom du cycle de vie associé.
    Alias : -W.
    En conflit avec associatedSmartStructure.
    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 de autoRelease 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 avec glob.
    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 avec sourcePath.

  • 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 au sourcePath 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 en dryRun et verbose 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 ou contextPassword 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/ en dryRun et verbose mode, avec includeFiles :
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 fichier Devbill.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.