SDK essential

API

SDKFactory

Depuis Process2024.1.0, un nouvel accès qui deviendra le seul point d’entrée aux fonctionnalités du SDK a été créé.

Il s’agit de la SDKFactory, accessible sans instanciation.

Groupe d’accès Description Exemple
UTILS Classes utilitaires SDKFactory.UTILS.getXXXUtils()
Info

À terme, la SDKFactory donnera accès à différents groupes (UTILS, MODULES,…).

Modules

L’accès à l’API passe par des classes gestionnaires que l’on nomme “module” : ce sont vos points d’entrées dans le SDK. La règle d’Or : Si vous cherchez une fonctionnalité, vérifiez d’abord sur votre module les méthodes disponibles.

Les modules sont classés par fonction :

Module Fonction Commentaire
IWorkflowModule Workflow
IDirectoryModule Annuaire
ILibraryModule Publication documentaire
IDocumentManagementModule GED
IForumModule Forums Supprimé depuis Process18.0.0
IPortalModule Portail
ISiteModule Publication WEB
  • Les modules sont accessibles dans tout code et peuvent être utilisés dans des classes Java “non identifiées Process”.
  • Si vous vous intégrez dans un contexte Process identifié, on vous fournira le module le plus approprié (pas nécessaire de le déclarer)
  • Rien ne vous empêchera par contre de déclarer vos propres modules.
  • Plusieurs modules peuvent cohabiter dans un même code.
  • Un module peut être initialisé via la classe Modules.get…; il doit alors être libéré par Modules.releaseModule(…)
Info

L’initialisation d’un module SDK GED est un peu plus complexe (voir documentation ou supports de formation SDK).

Objets “métier”

Les modules manipulent des objets Process qui leur sont propres. Ces objets n’intègrent pas obligatoirement toutes les APIs pour naviguer entre eux ; c’est le rôle du module.

Exemple : si je récupère un dossier de la publication documentaire, pour récupérer les documents de ce dossier, on ne fera pas iFolder.getFiles(); mais plutôt iLibraryModule.getFiles(iFolder);.

Identifiants

Process intègre différents identifiants :

  • La IStorageKey : cette classe encapsule l’ID “base de données” de l’objet que vous manipulez; il est unique et est dépendant de la base et n’est pas obligatoirement unique sur toute la base (dépend du type d’objet)
  • La Protocol URI : il s’agit d’une chaîne de caractère produite par Process (ou par vous en spécifique) et qui permet d’identifier de manière unique un objet dans Process. Cette clé sera privilégiée quand il s’agira de stocker des liens entre objets (ou autre besoin de stockage).

Scripts

Principe d’exécution de Scripts Java côté serveur

Process permet en effet de définir des scripts directement dans l’interface d’administration de Process : Workflow, EasySite, …

Il faut bien garder à l’esprit qu’il ne s’agit pas de Javascript client mais bien de Javascript côté serveur; ces codes sont évalués côté serveur et donne lieu à des exécutions qui auraient pu être faites par des codes Java (extensions par exemple).

Nous ne nous étendrons pas ici sur le JS puisque que les objets sont les mêmes qu’en Java et qu’à quelques exceptions prêt, la syntaxe sera la même qu’en Java.

Pour plus d’informations sur l’utilisation des scripts, reportez vous à la page dédiée.

Exécutions libres de codes SDK Process

Agents

La création d’un agent passe par un héritage de la classe com.axemble.vdoc.sdk.agent.base.BaseAgent. La méthode execute de cet agent sera lancée.

Vous pouvez déclarer vos agents dans l’interface Process en renseignant le nom complet de votre classe.

Les agents se situent dans l’administration dans Serveur / Planification des agents. Vous avez la possibilité dans cette version de déclarer vos agents dans des fichiers XML sous forme de modèles. Ces déclarations se font dans le dossier custom/webapp/WEB-INF/storage/custom/agents.

Controllers

Le principe du Controller est de reproduire dans l’environnement Process et avec plus de souplesse la logique des servlets Java. Vous pouvez donc créer un code qui sera déclenchable à volonté (en mode authentifié ou non) depuis une URL HTTP.

La création d’un Controller passe par un héritage de la classe com.axemble.vdoc.sdk.controllers.BaseController et l’appel d’un Controller se fera via le modèle d’URL suivant : http://SERVERNAME/vdoc/navigation?Controller=com.chemin.de.ma.Class.

Les Controllers peuvent être définis dans des fichiers XML (même principe que les déclarations de servlets). Il sera ainsi possible d’appeler une URL plus “humaine”.

Vous pouvez évidemment utiliser tous les objets SDK dans vos propres objets Java.

Système d’extensions

Les extensions sont des classes Java Process à étendre. Ces classes Java ont donc une pré-organisation et vous pouvez greffer vos développements sur des évènements identifiés (méthodes de la classe).

Workflow / Réservoirs de données

Extension Niveau Description Où la définir ?
BaseDocumentExtension UI Cette classe d’extension nous permet de capter des évènements liés aux formulaire de Workflow. Nous sommes donc purement au niveau UI.
On pourra capter les évènements de chargement, de modification de champs, de sauvegarde, de soumission d’étape, …
Information : cette classe est utilisable dans les formulaires d’étapes, les formulaires d’actions, les formulaires systèmes et les sous-formulaires.
Editer le formulaire concerné (Editeur de formulaires) et cliquer sur le bouton “Développement”; dans l’onglet “Extensions”
BaseResourceExtension UI Cette classe d’extension a le même rôle que la BaseDocumentExtension mais dans le cas d’un formulaire d’un tableau de ressources. Editer le formulaire de tableau (Editeur de formulaires) et cliquer sur le bouton “Développement”; dans l’onglet “Extensions”
BaseStorageResourceExtension UI Cette classe d’extension a le même rôle que la BaseDocumentExtension mais dans le cas des formulaires de données : formulaires Data Universe, formulaires EasySite Editer le formulaire concerné (Editeur de formulaires) et cliquer sur le bouton “Développement”; dans l’onglet “Extensions”
BaseLinkExtension UI Cette classe d’extension est liée aux tableaux dans le workflow. Cette classe permet d’être appelé au moment de la création d’un élément fils : au moment où le “lien” est créé entre le père et le fils; elle fonctionne aussi bien pour les tableau de ressources que pour les tableau de sous-processus. Attention : cette classe se déclare au niveau du formulaire d’étape, qui comprend le formulaire qui intègre le tableau en question.
BaseMailExtension Backoffice Cette extension nous permet d’être appelé au moment où un email est envoyé, de le modifier ou encore de le bloquer. Dans la partie “Notifications”, sur la version de processus, dans les propriétés de l’email
BaseMappingExtension UI / Backoffice Cette extension nous permet de créer une classe de définition d’abonnement : votre propre classe d’abonnement. Dans la définition XML de l’abonnement.
BaseResourceDefinitionExtension Backoffice Cette extension nous permet de capter des évènements bas niveau (indépendant de l’UI); vous êtes donc appelés ici juste avant le stockage en base de données : avant création, avant modification, avant modification de champs, avant suppression, … Dans la partie “Développement”, dans une version de processus, onglet “Extensions”
BaseViewExtension UI Cette extension est appelée au moment où une vue est présentée dans l’interface : avant évaluation et après évaluation; vous pourrez ainsi aussi bien ajouter une colonne dans la définition de votre vue que modifier le contenu d’une colonne pour tous les résultats de la recherche. Sur l’édition d’une vue, champ “Classe d’extension”.

Il existe également les triggers, dans lesquels il s’agit également de capter des évènements bas-niveau (même principe que la BaseResourceDefinitionExtension) mais plusieurs différences :

  • Sur des objets de différents types : workflow, annuaire, publication documentaire, … (Seulement sur l’annuaire pour l’instant)
  • Le scope est différent : sur l’ensemble de Process et non des éléments précis (pas seulement sur une application de workflow par exemple)

Authentification

Extension Niveau Description Où la définir ?
BaseAuthenticationExtension BackOffice Cette extension nous permet de capter les évènements d’authentification sur Process : avant connexion, après connexion, après déconnexion. Dans le fichier CustomResources.properties, on peut spécifier la clé com.axemble.vdoc.sdk.security.AuthenticationExtensions = chemin.vers.ma.Class
BasePasswordLoginModule BackOffice Cette classe nous permet de créer notre propre système d’authentification (JAAS) par le couple login/password. Dans le fichier JBoss\server\all\conf\login-config.xml, vous pouvez ajouter la déclaration de votre login-module dans la policy “VDoc” (fin du fichier)
BaseAutoLoginModule BackOffice Cette classe nous permet de créer nous propre système d’authentification automatique (sans login/password, par rapport au contexte courant) Dans le fichier JBoss\server\all\conf\login-config.xml, vous pouvez ajouter la déclaration de votre login-module dans la policy “VDoc” (fin du fichier)

Annuaire

Extension Niveau Description Où la définir ?
BaseDirectoryTransactionExtension BackOffice Cette extension est une extension bas-niveau qui nous permettra de capter des éléments de modifications de l’annuaire : création, modification ou suppression d’objets tels que les utilisateurs, les groupes, les localisations ou les organisations. Dans le fichier CustomResources.properties, on peut spécifier la clé com.axemble.vdoc.sdk.transaction.DirectoryTransactionExtensions = chemin.vers.ma.Class

Publication WEB

Extension Niveau Description Où la définir ?
BasePageExtension UI Cette extension nous permet de capter des évènements liés au chargement d’une page WEB du site : ajout ou modifications ou suppression de blocs ou de composants, évaluation de signets, … Dans l’édition d’une page, onglet “Développement”, champ “Classe d’extension”
BaseBlockExtension UI Cette extension propose les mêmes fonctionnalités que la classe BasePageExtension mais nous nous situons ici dans un bloc et non sur une page entière. Ajouter un bloc de type développement, vous pouvez alors spécifier votre classe
BaseComponentController UI Cette classe nous permet de créer nos propres composants (dans le cas des composants JSP) Dans le fichier XML de déclaration de votre nouveau composant.
BaseEditorExtension UI Cette classe est appelée dans l’animation d’un site, quand l’animateur édite les propriétés d’un composant; le formulaire affiché peut être contrôlé et personnalisé par SDK via cette classe; on retrouve les évènements classiques : chargement, modification de champs, validation. Dans le fichier XML de déclaration de votre nouveau composant.
BasePluginController UI Cette classe permet de définir nos propres plugins dans la publication WEB (pour plus d’informations sur les plugins, voir la documentation SDK et les supports de formation SDK) Dans le fichier XML de déclaration de votre nouveau plugin.

Packaging

Extension Niveau Description Où la définir ?
BaseProtocolUriExtension BackOffice Cette extension permet de gérer votre propre définition de Protocol URI pour vos objets; cela permet donc d’inclure dans des structures Process vos propres objets. Dans un fichier XML de déclaration dans le dossier custom\webapp\WEB-INF\storage\protocols

Protocol URI

Extension Niveau Description Où la définir ?
BaseProtocolUriExtension BackOffice Cette extension permet de gérer votre propre définition de Protocol URI pour vos objets; cela permet donc d’inclure dans des structures Process vos propres objets. Dans un fichier XML de déclaration dans le dossier custom\webapp\WEB-INF\storage\protocols

Framework graphique

Process utilise pour construire ces écrans un “framework graphique” qui est mis à disposition du SDK. Ainsi, vous pouvez créer des écrans personnalisés utilisant ce framework.

Avantages :

  • Facilité de conception
  • Facilité pour inclure ces écrans dans Process (Inclusion native)
  • Cohérence graphique et ergonomique entre le standard Process et les développements spécifiques
  • Migrations plus simples

Ecrans

Chaque écran du framework intègre :

  • Une description XML : positionnée dans le dossier “navigation” (voir plus haut)
  • Une classe provider : cette classe permet de controller l’écran et de gérer son comportement : chargement, sauvegarde, interactions avec l’utilisateur, … Chaque type d’écran possède sa propre classe de Provider qu’il faudra étendre.
Type d’écran Description Classe Provider à étendre
Form Formulaire basique BaseFormProvider
Sheet Ecran à onglets : chaque onglet peut définir son formulaire (ou autre) BaseSheetProvider
Wizard Assistant : l’écran est divisée en plusieurs étapes qui se succèdent : chaque étape peut définir son formulaire (ou autre) BaseWizardProvider
View Vue : création d’une vue de toute pièce (définition et données) BaseViewProvider
BrowsableView Vue arborescente : même principe que la View mais ici nos données sont organisées sous forme arborescente (Exemple : une vue présentant des fichiers seraient matérialisée ainsi; en effet, les dossiers permettent de créer l’arborescence) BaseBrowsableView
Explorer Explorateur : cet écran est le moins fréquemment utilisé en SDK; il permet de créer un écran complet d’administration (Exemple : l’administration Process) BaseExplorerProvider

Champs personnalisables

Vous pouvez créer vos propres champs personnalisables SDK en contrôlant à la fois la configuration, le stockage et le rendu final de votre champ.

Champ Description
BaseField Champ personnalisable classique; il peut être utilisé à tout endroit dans Process : écran spécifique du framework graphique, intégration dans la partie Workflow, intégration dans la partie réservoirs de données
BaseWorkflowField Champ personnalisable dédiée à la partie Workflow (hérite du BaseField); il propose quelques méthodes aidant un développeur souhaitant créer un champ uniquement dans la partie Workflow de Process.

System names

Data types in SDK

Code Description
-1 Unknown
1 LONG
2 FLOAT
3 STRING
4 DATE
5 BYTES
6 PERIOD
7 EXTERNAL_ELEMENT
12 BOOLEAN
13 DOUBLE
14 INTEGER
90 MAP
100 COLLECTION
101 COLLECTION_MAP
15 COLLECTION_EXTERNAL_ELEMENTS
102 COLLECTION_BLOB

Source : https://wiki.myvdoc.net/xwiki/bin/view/Dev+Floor/SDKEssential