OJC Framework
Une large couverture fonctionnelle, couvrant les fonctionnalités de publication, de gestion, et d'ALM intégrée
Une application "OJC Framework" a la possibilité d'exposer un ou plusieurs "portails". Ces portails sont perçus de l'extérieur comme des sites web parfaitement indépendants, avec une URL, une structure, un contenu et un style qui peuvent être très différents, mais ils ne sont que les différentes faces d'une même application, avec une seule base de données, et sont administrés centralement. Un excellent exemple est le présent site : OJC Software, OJC Communication et OJC Conseil sont des "portails" d'une même application.
L'administrateur définit la structure (menus de navigation) de chaque portail, construit les pages en s'appuyant sur des modèles et des skins (voir ci-dessous), et place les contenus et fonctionnalités sur les différentes portails (ces contenus et fonctionnalités peuvent donc être en partie les mêmes, ou différents, selon les choix de "publication" de l'administrateur).
C'est également cette capacité "multi-portails" qui permet à l'application d'exposer des web services, une application facebook ou une application mobile sur des portails dédiés.
Toutes les problématiques d'interfaçage et d'intégration sont naturellement éliminées du fait qu'il s'agit bien d'une seule et même application, avec une base de données, une administration centrale des comptes utilisateurs etc.
Nos services peuvent intervenir à différents niveaux :
L'esthétique et la mise en page des sites s'appuient sur un système de modèles de pages ("templates") et de styles ("skins") déployés sous la forme de modules, ou construits directement en ligne.
Les modèles de page prévoient des emplacements ("placeholders") dans lesquels peuvent être placés des "webparts". Ces webparts peuvent à leur tour prévoir des emplacements à l'intérieur desquels pourront être placés d'autres webparts etc.
Cette possibilité constitue un élément différenciateur important par rapport à de nombreux CMS, car elle permet la création d'une structure de page arborescente et permet donc de créer des structures HTML complexes directement en ligne.
Côté "style", un atout du Framework est qu'il permet d'exploiter pleinement les "cascades CSS", et de mutualiser ainsi de nombreuses lignes de codes. Pour reprendre le cas de nos propres sites, 90% du CSS est mutualisé, et les déclinaisons de couleurs ne prennent qu'une vingtaine de lignes de CSS pour chaque portail.
La construction des pages se fait directement en ligne, avec un éditeur "wysiwyg" (ce que vous voyez est ce que vous obtenez). Permettant de placer de façon "drag n'drop" (glisser et déposer) les "webparts" proposés par les modules installés.
Chaque webpart correspond à un élément de contenu (par exemple un texte simple, saisi directement sur la page), à des données stockées en base (par exemple une fiche produit, ou un billet de blog), ou à des fonctionnalités (par exemple le résultat d'un calcul, ou une liste de factures avec possibilité d'en créer de nouvelles).
Chaque module vient avec son modèle de données (les tables de la base de données qui vont être créées lors de son installation), ses fonctionnalités (processus de traitement) et les webparts qui constitueront l'interface utilisateur. L'administrateur a ensuite la possibilité d'exposer et de configurer les différents webparts sur le portail et sur les pages de son choix.
L'application gère également une bibliothèque de Containers. Ces Containers permettent de mettre en forme les pages (selon une disposition en colonne par exemple) ou d'encapsuler graphiquement un WebPart (pour le faire apparaître dans un cadre avec une illustration, par exemple). C'est l'utilisation de Containers qui permet une mise en page uniforme et hautement personnalisable, garantissant des tailles et des marges identiques partout où ils sont mis en oeuvre.
L'éditeur "wisywig" est également utilisé pour construire les modèles de pages, ou y placer des webparts. Un système d'héritage permet d'organiser les contenus de façon intelligente (p.ex. si on souhaite qu'un menu soit présent en haut de toutes les pages du site, on place ce menu sur le template parent, et il apparaîtra automatiquement sur toutes les pages qui utilisent un template descendant).
OJC Framework embarque en standard un module "publication" permettant d'administrer un ou plusieurs blogs. Chaque billet est associé à une ou plusieurs catégories, et l'affichage se fait au moyen d'un webpart dont on configure les critères de sélection (nombre et catégories des billets à afficher). Il est donc très facile de faire apparaître un billet simultanément sur plusieurs pages, voire plusieurs portails.
Par ailleurs OJC Framework gère les emails (en émission, ce qui est assez classique, mais également en réception, ce qui permet de traiter automatiquement des mails entrants ou leurs pièces jointes) et la publication sur les réseaux sociaux (facebook, linkedIn, twitter, viadeo).
La gestion des fichiers d'OJC Framework s'appuie sur des référentiels de fichiers sécurisés stockés sur disque ou en base, et pouvant être synchronisés avec d'autres référentiels (par exemple sur un autre environnement ou sur le poste personnel d'un administrateur). Le mécanisme de synchronisation s'appuie sur des webservices en streaming supportant des transferts volumineux. Pour la synchronisation à partir d'un poste local, elle nécessite l'installation d'une application desktop qui se connecte à ces webservices. Ce petit utilitaire est fantastiquement utile pour administrer les galeries de photos, les documents de travail, ou même des pièces comptables que l'on souhaite échanger avec son comptable (voir à ce sujet l'ERP OJC).
Côté utilisation des fichiers, ils peuvent être joints à des objets (image facture p.ex.), ou utilisés par divers webpart (OJC Framework propose en standard un ensemble de webparts permettant d'utiliser les fichiers : galerie, diaporama, portfolio de documents téléchargeables, etc.)
Toutes les fonctionnalités évoquées jusqu'ici ont trait aux CMS (Content Management System), mais OJC Framework est avant tout une plateforme de développement d'applications de gestion.
De nombreux contrôles d'interface utilisateur destinés à la gestion de données sont proposés par OJC Framework :
Ainsi que des contrôles permettant de construire une ergonomie claire et intuitive :
Notons que l'ensemble gère le lazyloading pour optimiser la bande passante (p.ex., et sauf indication contraire, une grille ne se rafraîchit pas si elle est sur un onglet masqué).
Précisons enfin que tous ces contrôles sont proposés mais pas imposés : une application basée sur OJC Framework peut utilise d'autres bibliothèques de contrôles, ou apporter les siens. OJC Framework fournit d'ailleurs l'infrastructure back-end / front-end permettant de développer rapidement ses propres contrôles utilisateurs.
La sécurité est une composante essentielle de la conception d'OJC Framework.
La gestion des droits proposée en standard s'appuie sur une relation tripartite (les utilisateurs ont des droits sur des objets), et facilite l'administation grâce à la gestion de groupes d'utilisateurs et de rôles (groupes de droits).
Par ailleurs nous avons évoqué plus haut l'architecture modulaire qui permet de faire des déploiements en DMZ sécurisés (par exemple en retirant de l'application déployée en DMZ les composants d'administration des droits, et en ne laissant que les fonctionnalités de lecture de ces droits). On peut de la même manière retirer des modules fonctionnels complets si l'on souhaite qu'ils soient techniquement inaccessibles, même pour un hacker qui aurait réussi à usurper une identité.
OJC Framework peut supporter un nombre illimité de langues, et est fourni par défaut en français et en anglais. Les fichiers de textes ("ressources") sont intelligibles et peuvent être administrés par les clients eux-mêmes (export / import), s'ils souhaitent les faire traduire pour ajouter de nouvelles langues.
Un mot cependant sur "ce qui est traduit" :
Dans le second cas, la gestion multi-langues est de la responsabilité du développeur du module (qui peut prévoir plusieurs champs) ou de l'administrateur. Par exemple :
OJC Framework contient en standard des fonctionnaltés de génération de fichiers, tels que word, PDF, etc. Cela est particluièrement utile pour générer des fichiers formatés, factures etc.
La configuration de ces fonctionnalités se fait en fournissant à l'application un modèle avec des champs de fusion.
Chaque module a la possibilité d'exposer des procédures d'export et d'import de données.
Les formats standards supportés par OJC Framework sont le CSV et le fichier plat à largeur fixe, mais il est possible d'en ajouter de nouveaux.
Un moteur de workflow est au coeur d'OJC Framework. Il est utilisé pour de nombreux traitements, tels que l'installation des modules et l'import des données, et peut être utilisé par les modules développés pour le Framework.
Un workflow peut être construit de façon figée à l'avance, ou généré dynamiquement (par exemple au démarrage l'application recense, par introspection, tous les modules installés et déduit, sur la base des dépendances, un workflow d'installation des modules).
Nous travaillons actuellement sur un éditeur de workflow en ligne (en vectoriel HTML5), qui permettra aux administrateurs de construire eux-même les workflow à partir des processus de traitement exposés par les modules déployés.
Pensé dès le début comme une plateforme destinée aux applications de gestion, et influencé par les exigences des grands groupes pour lesquels notre branche Conseil / Intégration travaille quotidiennement, OJC Framework prévoit des fonctionnalités d'administration et de pilotage permettant notamment :
Au-delà des fonctionnalités embarquées, OJC Framework c'est aussi une méthode et des outils de gestion du cycle de vie des applications (ALM - Application Lifecycle Management), supportés par une structuration et des fonctionnalités intégrées au coeur du Framework lui-même.
OJC Framework permet le déploiement d'applications sous la forme de modules, et en facilite la gestion, depuis le développement jusqu'à la mise à jour sur les environnements où ils sont déployés :
Team Foundation Server permet de stocker et de gérer le code source et le versionnage des applications. Nous proposons une organisation en branches, packages, etc. adaptée à la structure en couches et en modules des applications développées avec OJC Framework.
Rien de bien particulier ici : nous nous appuyons sur les fonctionnalités standards de TFS, qui permet de compiler à la demande, de façon programmée (chaque nuit p.ex.), ou lors des "commits" (gated check-in).
TFS, comme de nombreux systèmes de test, prévoit l'automatisation de tests unitaires. Avec OJC Framework, on peut l'utiliser également pour faire des tests d'intégration. La problématique initiale réside dans le fait qu'une application ne peut être testée sans une base de données, et que la seule façon de permettre à TFS de faire tourner des tests d'intégration est de déployer cette base à une adresse fixe. Cela ne peut être envisagé dès lors qu'on se place dans un contexte plus "industriel", où plusieurs applications, versions etc. sont développées par l'équipe. Beaucoup d'équipes contournent la difficulté en se limitant à des tests "sans base de données", qui nécessitent généralement le développement d'une couche d'accès aux données factice (Mock), qui génère sa propre charge de développement, de maintenance, et peut être également source d'erreurs.
Nous avons donc développé une infrastructure permettant de tester une application complète, en s'appuyant sur une base de données applicative déployée automatiquement avant chaque série de tests et archivée à la fin (pour une éventuelle analyse post-mortem). L'état initial de la base est fourni par un backup, puis elle est mise à jour automatiquement (par les mêmes procédures qui mettent à jour l'application lors d'un déploiement en recette ou en production) avant de faire tourner les tests. Ceci permet donc :
La charge globale associée à la gestion des tests s'en trouve considérablement réduite, et la qualité des livrables considérablement améliorée.
Le déploiement et la mise à jour des applications et des environnements sont pilotés grâce à une collaboration entre le Framework et TFS, dont nous avons étendu les fonctionnalités :
Pour l'instant OJC Framework ne propose que l'automatisation de la documentation technique (c'est-à-dire la compilation et la publication web des commentaire XML directement intégrés dans le code source). Notre objectif dans les versions à venir est d'intégrer également, par le biais d'une structuration en modules, versions et "couches documentaires" :