{{indexmenu_n>10}} ====== Présentation du module Dynacase API ====== Le module Dynacase API fournit les classes javascript nécessaires pour interagir avec le serveur Dynacase depuis un navigateur web. Il est basé sur un ensemble de classes reprenant les éléments constituant Dynacase tels que le document, la famille, la collection ou le contexte. Toutes les classes du module appartiennent à la variable globale **Fdl** (Dynacase Library) et suivent donc la syntaxe : Fdl.. Le module est parfaitement autonome et peut être utilisé conjointement avec d'autres bibliothèques javascript telles que [[http://www.extjs.com|Ext JS]] ou [[http://www.jquery.com|jQuery]]. La [[http://api.dynacase.org/freedom-data/|documentation de référence]] contient la description des objets de l'api ainsi que leurs attributs et méthodes. Il s'agit d'une interface identique à la documentation des classes Ext JS. Les classes relatives à Dynacase API se trouvent dans le dossier Fdl. Les exemples pour ce module se trouvent, en partant d'une installation du module ''freedom-apisamples'', dans le répertoire : /lib/data-examples/ . ===== Fdl.Context ===== [[http://api.dynacase.org/freedom-extui/?class=Fdl.Context|Référence Fdl.Context]] Fdl.Context est la classe de base dans l'utilisation du module Dynacase API. Elle contient les méthodes fondamentales pour effectuer des requêtes sur le serveur Dynacase. Toutes les classes d'objet capables d'interaction avec le serveur Dynacase sont équipées d'un objet Fdl.Context. Normalement, l'objet Fdl.Context est instancié avec l'url du serveur Dynacase qu'il doit interroger par la suite. Cela effectué, l'instance de Fdl.Context propose un grand nombre de méthodes permettant d'obtenir des informations du serveur. En particulier, elle est capable de servir d'usine (au sens design pattern factory) à un certain nombre d'objet du module. C'est à dire qu'elle donne un certain nombre de méthodes dont l'utilité est de retourner une instance d'objet correctement paramétrée pour être utilisée. En particulier, Fdl.Context sert à récupérer des instances d'objet Fdl.Document et ses héritiers (Fdl.Family, Fdl.Workflow, ...). ==== Retours d'erreur ==== Fdl.Context contient les méthodes capables de renseigner sur les erreurs rencontrées lors des appels sur le serveur. Lorsqu'une méthode d'un objet du module n'a pas un retour valide (tel que défini dans la spécification de chaque méthode, voir la référence), l'appel de **getLastErrorMessage()** permet de récupérer le dernier message d'erreur du serveur. ==== Authentification ==== Fdl.Context contient les méthodes qui permettent de gérer l'authentification d'un utilisateur. //Exemple : instanciation d'un contexte et authentification// var context = new Fdl.Context({ url:'http://freedom/' }); if (! context.isConnected()) { alert('Connection Error : ' + context.getLastErrorMessage()); return; } if (! context.isAuthenticated()) { var user = context.setAuthentification({ login:'admin', password:'anakeen' }); } if (! user) { alert('Authentification Error : ' + context.getLastErrorMessage()); return; } ==== Traduction ==== Fdl.Context permet de gérer la traduction des interfaces en utilisant un dictionnaire de langue pour les applications. La méthode **_()** permet d'appeler le texte localisé selon le profil de l'utilisateur. La génération du fichier correspondant repose sur l'utilisation de l'outil de gestion de langue po. [A compléter] ==== Requête serveur ==== Fdl.Context permet d'envoyer une requête au serveur Dynacase en utilisant la méthode **retrieveData()**. Les objets du module reposent sur cette méthode pour charger ou envoyer les données serveur. Elle peut être utilisée pour exécuter une action d'application. ===== Fdl.Document ===== [[http://api.dynacase.org/freedom-extui/?class=Fdl.Document|Référence Fdl.Document]] Fdl.Document est la classe représentant un document Dynacase. Il est récupéré depuis un Fdl.Context par la méthode getDocument(). Il faut se souvenir que dans un système Dynacase, tout est document. Fdl.Document possède donc des classes héritées plus spécifiques pour gérer les comportements étendus disponibles dans certaines familles natives de document, en particulier : * Fdl.Family, qui représente un document de type famille de document Dynacase. Noter que la classe Fdl.Family, de façon analogue à la structure d'une famille Dynacase reposant sur la définition d'un certain nombre d'attributs, est retournée équipée d'objets Fdl.Attribute. Il existe tout un système de classes héritées de Fdl.Attribute pour décrire de façon pertinente l'attribut en question, non détaillé ici. * Fdl.Collection, qui représente un document de type collection. * Fdl.Workflow, qui représente un document de type cycle de vie. La méthode getDocument() retourne un objet qui est une instance correcte parmi Fdl.Document et ses familles héritées. On trouve ici l'intérêt d'avoir un Fdl.Context qui suive le modèle de conception Usine, puisque le développeur n'a pas à déterminer quelle classe instancier. Il peut bien sûr ensuite tester l'appartenance de l'objet qu'il a obtenu à l'une de ces classes pour déterminer des comportements particuliers. ===== Fdl.Collection ===== [[http://api.dynacase.org/freedom-extui/?class=Fdl.Collection|Référence Fdl.Collection]] Fdl.Collection est la classe représentant un document Dynacase de type collection, qui peut être soit un dossier, soit une recherche. Ces documents collection contiennent d'autres documents, défini de façon statiques dans le cas des dossiers, par des critères de recherche dans le cas des recherches (ou dossiers intelligents). Dans le cas d'une recherche, la classe filtre est utilisée pour délimiter le périmètre de recherche (voir Fdl.DocumentFilter). ===== Fdl.SearchDocument ===== [[http://api.dynacase.org/freedom-extui/?class=Fdl.SearchDocument|Référence Fdl.SearchDocument]] Fdl.SearchDocument est une classe permettant d'effectuer des recherches de documents sur le serveur Dynacase de façon volatile (aucun document permanent n'est créé sur le serveur suite à une recherche effectuée ainsi), afin de récupérer un contenu restreint par un filtre, sans passer par la création d'un document recherche. Sur des interfaces applicatives, elle peut être utilisée par exemple pour assurer le fonctionnement de champs de recherche texte (voir Fdl.DocumentFilter). ===== Fdl.DocumentSelection ===== [[http://api.dynacase.org/freedom-extui/?class=Fdl.DocumentSelection|Référence Fdl.DocumentSelection]] Fdl.DocumentSelection est une classe permettant d'exprimer une sélection de documents. Il est ainsi possible d'utiliser certaines méthodes sur une sélection de documents plutôt que d'effectuer une itération document par document (par exemple, déplacer une sélection de document d'un dossier dans un autre). La structure de base d'un Fdl.DocumentSelection définit : - le mode de sélection ('rien sauf' ou 'tout sauf') - la collection sur laquelle porte la sélection (obligatoire dans le mode 'tout sauf') - une liste de documents ajoutée ou retranchée (selon le mode de sélection, peut être vide) - un filtre Fdl.DocumentFilter (non obligatoire) Les sélections de documents peuvent servir à définir les sélections multiples effectuées et manipulées par les utilisateurs sur des interfaces graphiques. var selection = new Fdl.DocumentSelection( { mainSelector: 'all', // Select all documents ... collectionId : 2000, // ... from collection 2000 ... selectionItems: [1050,1100,1150] // ... except documents 1050, 1100, and 1150 }); // Add a Fdl.DocumentFilter to the Fdl.DocumentSelection selection.filter = new Fdl.DocumentFilter({ family:'DIR' }); // Insert a document to selectionItems selection.insertToList({id:1200}); ===== Fdl.DocumentFilter ===== [[http://api.dynacase.org/freedom-extui/?class=Fdl.DocumentFilter|Référence Fdl.DocumentFilter]] Fdl.DocumentFilter est une classe représentant la notion de filtre de documents. Elle permet de caractériser un sous ensemble de documents en exprimant des conditions sur les familles et les valeurs à satisfaire. La classe Fdl.DocumentFilter est à utiliser dans les classes suivantes : Fdl.SearchDocument. Le contenu d'une document de recherche est défini par le filtre qui sert à le construire. Fdl.Collection. Le contenu d'une collection de type recherche est défini par un ensemble de filtre qui peuvent être ajoutés à la recherche. Il est possible de définir de cette façon des recherches multifamille. La récupération du contenu d'une recherche peut également être soumise à un filtre volatile. Fdl.DocumentSelection. Une sélection de documents peut utiliser un filtre pour restreindre à un sous ensemble des documents exprimés par la sélection. La structure de base d'un Fdl.DocumentFilter définit : - une famille sur laquelle porte la contrainte (non obligatoire) - une expression logique comportant des blocs constitués d'un opérateur et d'opérande(s) Les opérandes peuvent être exprimés sous la forme d'appel à des méthodes définies côté serveur du document Dynacase, comme montré dans l'exemple suivant avec '::getSystemUserId()'. //Exemple : ce filtre permet de sélectionner les documents de la famille Dossier qui ne sont pas verrouillés ou qui sont verrouillés par l'utilisateur courant.// var filter = new Fdl.DocumentFilter( { family : 'DIR', criteria : [ { or : [ { operator : '=', left : 'locked', right : 0 }, { operator : '=', left : 'locked', right : '::getSystemUserId()' } ] }, ] }); ===== Fdl.GroupRequest ===== [[http://api.dynacase.org/freedom-extui/?class=Fdl.GroupeRequest|Référence Fdl.GroupRequest]] Fdl.GroupRequest est une classe permettant d'enchaîner plusieurs opérations sur le serveur Dynacase en un seul appel. Son objectif est de rassembler plusieurs appels serveur en un seul afin de gagner en performance. De façon générale, exécuter un seul appel comportant plusieurs méthodes est plus avantageux en durée qu'exécuter plusieurs petits appels. //Exemple : cette requête groupée permet d'accéder à un document dossier, de le verrouiller, d'accéder à son contenu, et de verrouiller son contenu.// var groupRequest = context.createGroupRequest(); groupRequest.addRequest({d:g.getDocument({id:1000}); groupRequest.addRequest({l:g.get('d').callMethod('lock')}); groupRequest.addRequest({c:g.get('d').callMethod('getContent')}); groupRequest.addRequest({z:g.foreach('c').callMethod('lock')}); var result = groupRequest.submit(); var document = groupRequest.get('d'); var content = groupRequest.get('c'); ===== Fdl.Notifier ===== [[http://api.dynacase.org/freedom-extui/?class=Fdl.Notifier|Référence Fdl.Notifier]] Fdl.Notifier est une classe permettant de mettre en oeuvre une récupération périodique d'informations sur le serveur Dynacase. var document = context.getDocument({ id:1000 }); document.fireEvent = function (code,args) { // Process event here } var notifier = context.getNotifier(); notifier.subscribe(document); // or alternatively notifier.subscribe({object:document,callback:'fireEvent'}); notifier.loop();