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() |
À 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(…)
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