Best Practices : Utilisation des APIs de Lotus Web Content Management



Documents pareils
IBM Workplace : Live!

Introduction aux concepts d ez Publish

Alfstore workflow framework Spécification technique

Web Tier : déploiement de servlets

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

WINDOWS SHAREPOINT SERVICES 2007

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

bbc Launch Pad Juillet 2011 Version 10.0

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Dématérialisation et travail collaboratif

Création d un service web avec NetBeans 5.5 et SJAS 9

Module BD et sites WEB

Business Sharepoint Contenu

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Les logiciels gratuits en ligne

8 Mars Guide du Wiki Confluence

B-web V4 MANUEL D UTILISATION. Espace de travail. Clear2Pay Belgium SA B-web V4 Manuel d Utilisation: Espace de travail

ESPACE COLLABORATIF SHAREPOINT

Utiliser un CMS: Wordpress

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

Guide Enseignant de l application OpenERP

Déployer les Fonts, Icones, et Images avec Forms Services 11G

Projet en nouvelles technologies de l information et de la communication

Introduction à Eclipse

La base de données XML exist. A. Belaïd

Table des matières L INTEGRATION DE SAS AVEC JMP. Les échanges de données entre SAS et JMP, en mode déconnecté. Dans JMP

Créer une base de données vidéo sans programmation (avec Drupal)

Manuel d utilisation du site web de l ONRN

Administration du site (Back Office)

Description des pratiques à adopter pour la mise à jour du layout en utilisant le gestionnaire de conception de Sharepoint 2013

Introduction MOSS 2007

1 / Introduction. 2 / Gestion des comptes cpanel. Guide débuter avec WHM. 2.1Créer un package. 2.2Créer un compte cpanel

WordPress Référencement naturel (SEO) Optimiser. son référencement. Daniel Roch. Préface d Olivier Andrieu

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Un outil open source de gestion de bibliographies

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

lundi 3 août 2009 Choose your language What is Document Connection for Mac? Communautés Numériques L informatique à la portée du Grand Public

IBM Lotus Notes/Domino v7, fonctionnalités et évolutions

Mise en œuvre des serveurs d application

WysiUpStudio. CMS professionnel. pour la création et la maintenance évolutive de sites et applications Internet V. 6.x

LES ACCES ODBC AVEC LE SYSTEME SAS

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Créer et partager des fichiers

KWISATZ_TUTO_module_magento novembre 2012 KWISATZ MODULE MAGENTO

Connexions à un projet CVS via Eclipse en accès local et distant. 15 Mai 2007

Service Informatique et Télématique (SITEL), Emile-Argand 11, 2009 Neuchâtel, Tél ,

INTRODUCTION AU CMS MODX

Guide d'installation et de configuration du module

OpenPaaS Le réseau social d'entreprise

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

BIRT (Business Intelligence and Reporting Tools)

Tenrox. Guide d intégration Tenrox-Salesforce. Janvier Tenrox. Tous droits réservés.

Administration du site

JavaServer Pages (JSP)

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

IBM DB2 Alphablox. d administration GC

Your Detecting Connection. Manuel de l utilisateur. support@xchange2.net

Vue d ensemble technique

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Publier dans la Base Documentaire

Plateforme PAYZEN. Définition de Web-services


Guide de l utilisateur du Centre de gestion des licences en volume LICENCES EN VOLUME MICROSOFT

ANIMER UNE COMMUNAUTÉ CONSTRUCTION21

VXPERT SYSTEMES. CITRIX NETSCALER 10.1 et SMS PASSCODE 6.2. Guide d installation et de configuration pour Xenapp 6.5 avec SMS PASSCODE 6.

PARTAGER UN ANNUAIRE COLLECTIF DE SIGNETS AVEC DEL.ICIO.US

Optimiser pour les appareils mobiles

ECLIPSE ET PDT (Php development tools)

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

La base de données dans ArtemiS SUITE

Tutoriel pour la création d'un Google Sites

WebSpy Analyzer Giga 2.1 Guide de démarrage

arcopole Studio Annexe 4 Intégration LDAP et processus d authentification Site du programme arcopole :

Créer son compte del.icio.us

Documentation de produit SAP Cloud for Customer (novembre 2013) Nouveautés de SAP Cloud for Customer pour les administrateurs

Application de lecture de carte SESAM-Vitale Jeebop

Guide d'installation et de configuration de Pervasive.SQL 7 dans un environnement réseau Microsoft Windows NT

Définition des Webservices Ordre de paiement par . Version 1.0

Documentation Liste des changements apportés

Symantec Backup Exec Remote Media Agent for Linux Servers

Travaux Pratiques : Lucène - Gestion d un index plein texte

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

SUPPORT DE COURS / PHP PARTIE 3

Installation de GFI FAXmaker

Développez votre e-commerce avec WebSphere Commerce

Tivoli Identity Manager

Gestion de références bibliographiques

Construire des plug-ins pour SAS Management Console SAS 9.1

Contenu. Thème «responsive» pour WordPress Installer le thème responsive (disponible aussi sur le site wordpress.org) Activer ce thème

PHP 5.4 Développez un site web dynamique et interactif

Déployer une application Web avec WebMatrix et Ma Plateforme Web

Comment consolider des données

Tutoriel Création d une source Cydia et compilation des packages sous Linux

PDO : PHP Data Object 1/13

Transcription:

Best Practices : Utilisation des APIs de Lotus Web Content Management

Agenda Scénarios IBM Lotus Web Content Management Java Server Page (JSP) Introduction Balises JSP Composants JSP Exemples JSP Page de démarrage personalisée IBM Lotus Web Content Management Application Programming Interface (API) Introduction Obtenir un Workspace RenderingContext Gérer les contenus Rechercher des contenus Améliorer des pages de démarrage personnalisées Customiser les éléments utilisant des JSP 2 Résumé Best Practices

Scénarios Portlet personnalisée avec du contenu WCM Des fonctionnalités du Portail à l intérieur de WCM Mise en page impossible au travers des composants standards Mise en place de site multilingue Importer du contenu web / ressources existants Publication automatique au travers de WCM Intégration avec des workflows externes Modification en masse de contenus Création d actions spécifiques de workflows etc A utiliser seulement si cela n est pas possible Out-of-the-box 3

IBM Lotus Web Content Management JSP Introduction aux JSP WCM Balises JSP Composants JSP Exemples JSP Page de démarrage personalisée 4

Introduction aux JSP WCM 5

Balises JSP Utilisée pour un accès simplifié aux composants et contenus WCM Utilisation possible à partir d un composant JSP ou d une page JSP indépendante Utiliser la taglib suivante pour l inclure dans votre page JSP <%@ taglib uri="/web-inf/tld/wcm.tld" prefix="wcm" %> 6

Balise JSP: Initialisation InitWorkspace Tag: définition du workspace initial <wcm:initworkspace username=" " password=" " > [Error Message] </wcm:initworkspace> Explicit Context Tag: définition du chemin au serveur WCM <wcm:setexplicitcontext wcmwebapppath=" " wcmservletpath=" " path=" " > [Error Message] </wcm:setexplicitcontext> 7 Context Retrieval Tag: définition du contexte en fonction de l'emplacement d'une chaîne de chemin <wcm:setcontext location=" " wcmwebapppath="" wcmservletpath="" param=" " > [Error Message] </wcm:setcontext>

Balise JSP: balises d affichage librarycomponent Tag: affichage d un composant à partir de la bibliothèque de composants <wcm:librarycomponent name=" " > [Error Message] </wcm:librarycomponent> content Tag: affichage du contenu basé sur le contexte actuel d une page <wcm:content pagedesign=" " > [Error Message] </wcm:content> contentcomponent Tag: affichage d un composant à partir du site, de la zone de site ou du contenu actuel <wcm:contentcomponent type=" " key=" " > [Error Message] </wcm:setcontext> 8 Best Practices: Si vous avez besoin d une gestion multilingue des erreurs, envisager d'utiliser Java en utilisant des Resource Bundles API

Balise JSP : Exemple <%@ taglib uri="/web-inf/tld/wcm.tld" prefix="wcm" %> <html><head><title>ibm Lotus Web Content Management JSP Testing</title></head><body> <wcm:initworkspace username= wpsadmin" password="password" > Set initworkspace Failed<br> </wcm:initworkspace> <wcm:setexplicitcontext path="showcase/showcase+internal+site/news/" > Setting Explicit Context Failed<br> </wcm:setexplicitcontext> <wcm:librarycomponent name= SC Menu News"> Component Rendering Failed<br> </wcm:librarycomponent> <wcm:content> Content Rendering Failed<br> </wcm:content> <wcm:contentcomponent type="content" key= SC Body" > Content Element Rendering Failed<br> </wcm:contentcomponent> </body></html> 9

Composant JSP Vue Générale Référence une page JSP existante et stockée sur le serveur Cette JSP peut contenir ou non des références aux JSP WCM ou API Peut être intégrée dans n importe quel modèle de présentation comme un composant Peut être vue parmi d autres contenus WCM ou indépendamment 10

Utilisation des composants JSP Stockage des pages JSP Pour une utilisation à partir des portlets de rendu local et distant, les pages JSP doivent être stockées dans le répertoire war des portlets 6.1:<was_profile_root>/installedApps/<node>/PA_WCMLocalRendering.ear\ilwwcmlocalrende.war/jsp/html 6.0: <portal_server_root>/installedapps/wcm_local_ng_portlet_pa_xxxxxxx.ear\pa_xxxxxx.war\js p\html, where xxxxxxx is unique to your installation Pour une utilisation à partir de la portlet de contribution (comme page de démarrage personalisée, intégration d un editeur riche texte tiers ou JSP spécifique dédiée à un modèle de création) 6.1: <was_profile_root>/installedapps/<node>/pa_wcm_authoring_ui.ear/ilwwcmauthoring.war/jsp/html 6.0: <portal_server_root>/installedapps/wcm_authoring_ui_pa_xxxxxxx.ear/pa_xxxxxxx.war/jsp/h tml, where xxxxxxx is unique to your installation Pour une utilisation indépendante, utilisez la servlet et stockez la page JSP dans le répertoire WebApp du serveur WCM <was_profile_root>/installedapps/<node>/wcm.ear/ilwwcm.war/jsp/html 11

Utilisation des composants JSP Best Practices: La Syndication ne déplace pas les pages JSP référencées dans les composants JSP. Seul les composants JSP sont déplacés. Les pages JSP doivent être disponibles sur les serveurs Syndicateur et Abonné. L installation de certains fixes supprime les fichiers JSP spécifiques. Il faudra donc toujours sauvegarder ces fichiers dans un premier temps et les restorer si nécessaire. TIP! Consulter l article sur la gestion multilocal pour sa description comment inclure dans le fichier WAR des portlets. 12

Page de démarrage personalisée Solution rapide pour créer une interface utilisateur simple et créer des contenus spécifiques - Introduction Remplace le plus souvent la nécessité d exemple de «Custom Template Portlet» pour V5.1 Utilisation des Remote Actions : <a href="?wcmauthoringaction=<action>">text</a> Actions possibles : approve, reject, delete, edit, read, openmainview, new Nouveau en 6.1: move, viewversions, viewhistoric et add comments 13

Page de démarrage personalisée Approve, decline, delete, edit, read: Actions distantes Ceci est utilisé pour réaliser des actions sur les articles, exemple:?wcmauthoringaction=approve&docid=id?wcmauthoringaction=decline&docid=id1&docid=id2 L ID est un objet document (API WCM) converti en string (en utilisant le méthode.tostring() ), exemple: docid=com.ibm.workplace.wcm.api.wcm_content/id Openmainview Ceci est utilisé pour ouvrir une vue de la portlet de contribution, exemple:?wcmauthoringaction=openmainview&view=contentbysiteare a Liste des vues paramétrables: contentbysitearea, contentbytitle, myrecent, mydraft, mypendingapproval, mypublished, myexpired, mydeleted, alldraftitems, allexpireditems, allpublisheditems, alldeleteditems, componentsbytype 14

Page de démarrage personalisée New Ceci est utilisé pour ouvrir un nouveau formulaire de contenu, exemple: Actions distantes?wcmauthoringaction=new&type=com.ibm.workplace.wcm.api.wcm_content Les paramètres sont com.ibm.workplace.wcm.api.<nom>, avec Nom : WCM_AuthoringTemplate, WCM_Category, WCM_Content, WCM_FileComponent, WCM_HTMLComponent, WCM_ImageComponent, WCM_PresentationTemplate, WCM_RichTextComponent, WCM_Site, WCM_SiteArea, WCM_Taxonomy, WCM_TextComponent, WCM_Workflow, WCM_WorkflowStage Nouveau en 6.1: WCM_DateComponent, WCM_NumericComponent, WCM_PresentationTemplate, WCM_ShortTextComponent Renommé en 6.1 ('Library' a été enlevé, compatible) WCM_LibraryFileComponent, WCM_LibraryImageComponent, WCM_LibraryHTMLComponent, WCM_LibraryDateComponent, WCM_LibraryNumericComponent Déprécié en 6.1: WCM_LibraryDocumentManagerComponent 15

Page de démarrage personalisée New Actions (suite) distantes Pour un nouveau contenu, vous pouvez spécifier un modèle de création par défaut en ajoutant son ID atid :?wcmauthoringaction=new&type=com.ibm.workplace.wcm.api.wcm_content?atid=id Pour une nouvelle zone de site, contenus et catégories, vous pouvez ajouter le pid du parent sous lequel doit être créé le nouvel article:?wcmauthoringaction=new&type=com.ibm.workplace.wcm.api.wcm_content?pid=id?wcmauthoringaction=new&type=com.ibm.workplace.wcm.api.wcm_sitearea?pid=id?wcmauthoringaction=new&type=com.ibm.workplace.wcm.api.wcm_category?pid=id Nouveau en 6.1:spécifier le positionnement d une zone de site en utilisant &position (options: start et end )?wcmauthoringaction=new&type=com.ibm.workplace.wcm.api.wcm_sitearea&positio n=start 16

Page de démarrage personalisée Move Actions (nouveau en 6.1) distantes Ceci est utilisé pour déplacer une zone de site ou un contenu Exemple pour ouvrir le dialogue pour déplacer la zone de site ou contenu:?wcmauthoringaction=move&docid=com.ibm.workplace.wcm.api.wcm_content/id1 Un déplacement de niveau est spécifié par "1" pour monter et "-1" pour descendre. Exemple pour deplacer un contenu d une position:?wcmauthoringaction=move&docid=com.ibm.workplace.wcm.api.wcm_content/id1&pid=com. ibm.workplace.wcm.api.wcm_sitearea/id1&movedirection=1 Viewversions (nouveau en 6.1) Ceci est utilisé pour accéder à la liste des versions d un élément. Spécifier le docid de l article.?wcmauthoringaction=viewversions&docid=com.ibm.workplace.wcm.api.wcm_content/id 1 Viewhistory (nouveau en 6.1) Ceci est utilisé pour accéder à l historique d un article. Spécifier le docid de l article. Ex.:?wcmAuthoringAction=viewhistory&docid=com.ibm.workplace.wcm.api.WCM_Content/ID1 17

Page de démarrage personalisée Actions Remplir des champs pendant distantes la création de contenu (nouveau en 6.1) Lorsque vous utilisez les paramètres new et edit avec un contenu, vous pouvez aussi ajouter des données aux différents champs du contenu en utilisant une URL. Exemple:?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content &wcmfield.content.name=newcontent Liste des parametres wcmfield.content.<nom>, avec Nom: name, title, description, authors, owners, publishdate, expirydate, generaldateone, generaldatetwo, workflow, categories and keywords Liste des type d éléments &wcmfield.element.[nom d élément] avec [nom d élément] le nom de l élément que vous allez remplir: texte, HTML, Rich Text Editor, sélection d option, séléction d utilisateur, date et heure, nombre, JSP, lien, référence de composant Vous pouvez définir de multiples éléments en même temps et définir des éléments multivalués comme les champs Auteurs, Responsables, Catégories, mots-clés. Exemple:?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content &wcmfield.content.keywords=keyword1&wcmfield.content.keywords=keyword2 18

Page de démarrage personalisée Actions Save (nouveau en 6.1) distantes AutoSave: Ceci est utilisé pour sauvegarder l article. Cette action est réalisée en arrière-plan et n est pas visible pour les utilisateurs. Exemple: &wcmfield.autosave=true savevalidate Ce paramètre détermine si un avertissement ou une erreur resultant de l enregistrement automatique (AutoSave) sera présenté à l utilisateur. Par défaut, la valeur est true. Exemple pour désactiver l action : &wcmfield.savevalidate=false Ajouter des commentaires à l historique d un élément (nouveau en 6.1) Ajouter un commentaire à l historique d un élément avec &comment=commentaire dans l URL. Exemple: http://<host>/wps/myportal/wcmauthoring?wcmauthoringaction=edit&docid=com.ibm.w orkplace.wcm.api.wcm_content/id1&createdraft=true&comment=commentaire 19

Page de démarrage personalisée Exemple - JSP <table> <tr><td> <a href="?wcmauthoringaction=new&type=com.ibm.workplace.wcm.api.wcm_content"> Create new Content</a> </td></tr> <tr><td> <a href="?wcmauthoringaction=openmainview&view=contentbytitle"> Open content by title</a> </td></tr> <tr><td> <a href="?wcmauthoringaction=openmainview&view=contentbysitearea"> Open content by site area</a> </td></tr> </table> 20

Page de démarrage personalisée Configurer la portlet de Utiliser configurer ou personnaliser afin de définir les paramètres de la portlet (si nécessaire faire une contribution copie de la portlet) Selectionner Page de démarrage Entrer le positionnement du fichier JSP à prendre en compte Masquer si besoin la barre des taches 21

Page de démarrage personalisée Exemple 22

IBM Lotus Web Content Management API Introduction Obtenir un espace de travail RenderingContext Gérer les contenus Rechercher des contenus Améliorer les pages de démarrage personnalisées Customiser les éléments en utilisant des JSP 23

Introduction API est axé sur la transformation contenu (creation, mise à jour, déplacer dans un flux de travail) Bibliothèques de contenu Web: Déplacement ou copie d éléments au sein d une bibliothèque ou entre bibliothèques Itérateurs de recherche d'id d'objets : Recherche d article d un type donné à partir du nom ou type Recherche de composant de bibliothèque à partir du nom Recherche de contenu à partir du modèle de création, de la catégorie, du chemin d accès ou de l étape de flux de travaux Recherche de contenu modifiés à partir d une date ou parmi des dates La recherche de contenu (identique aux critères de recherche du composant Menu, mais utilisation de paramètres d'objets tels que les identifiants) L'extraction à partir des ID articles La possibilité de créer, supprimer et sauvegarder les éléments suivants : Contenu, Site, Zones de Site, Composant de ressources de fichier, Composant HTML, Composant image, Composant date et heure, (Le composant Document Manager n est plus disponible en 6.1), Composant lien, Composant numérique, Composant de feuille de Style ou Composant de sélection utilisateur et nouveau en 6.1: Composant Texte Court et composant Text La capacité à extraire les objets suivants : Contenus, Sites, Zone de Site, Taxinomies et categories, Workflows, Composants La capacité à extraire les objets suivants à partir des recherches (mais PAS en tant qu'objet) : ID Modèle de création (Auth. Tmpl.) ID Modèle de présentation (Presentation Templ.) et ID étape de workflow La capacité d'approuver et de rejeter les articles de contenu inclus dans une étape d'un flux de travaux. Les autres types d'élément ne prennent pas cette fonction en charge. 24

Introduction Nouveau en 6.1 Création d actions personnalisées de flux de travaux Permet d invoquer du code spécifique dans un processus de workflow WCM. Pour créer des actions de workflow personnalisées comme Archiver, promouvoir la publication de bibliothèque, envoi d e-mail configurable, etc Workflow : gestion dynamique des Approbateurs Quelques nouvelles méthodes ont été ajoutées à com.ibm.workplace.wcm.api.content pour permettre de changer les approbateurs Les approbateurs peuvent maintenant être ajoutés et supprimés durant le process de workflow Les accès approbateur peuvent être testés Service de bibliothèque Le service de bibliothèque expose des APIs pour créer, sauvegarder, copier, exporter et importer des bibliothèques WCM Liste des documents d une bibliothèque Exporte une liste d information contenant tous les objets de contenu web dans une bibliothèque Gérer la syndication Nouvelles APIs pour permettre le contrôle dynamique de la syndication 25

Obtenir un espace de travail in 6 <%@ page import="com.ibm.workplace.wcm.api.*" %> <% Décrit dans l Info Center //Obtenir le répertoire Repository repository = WCM_API.getRepository(); //Déclarer de l instance de l espace de travail Workspace workspace = null; //Vérifier si l instance utilisateur existe et s il est authentifié if(request.getuserprincipal()!= null) { //A utiliser seulement dans une portlet workspace = repository.getworkspace( (Principal) portletrequest.getuser() ); //A utiliser hors contexte portlet workspace = repository.getworkspace((principal) request.getuserprincipal() ); } else { workspace = repository.getanonymousworkspace(); } //Travailler avec l espace de travail //Autre option, définir un espace de travail authentifié en utilisant nom_utilisateur / mot_de_passe Workspace workspace = repository.getworkspace( user", password"); //Best Practice: fermer un espace de travail avec end doit se faire seulement dans une page JSP hors contexte portlet WCM (JSP non utilisé au travers du composant JSP) WCM_API.getRepository().endWorkspace(); 26

Obtenir un espace de travail en 6.1 Info Center 6.1 Utiliser WebContentService au lieu des WCM_API... //Obtenir le WebContentService try { // Initialisation du contexte InitialContext ctx = new InitialContext(); // Obtenir le WebContentService en utilisant le nom JNDI WebContentService webcontentservice = (WebContentService) ctx.lookup("portal:service/wcm/webcontentservice"); } catch (NamingException ne) { System.out.print("Naming Exception: " + ne); } Repository repository = webcontentservice.getrepository(); //Continuer avec le repositoire pour déclarer l instance de l espace de travail, etc... 27

Obtenir un espace de travail Utiliser le cache Best Practice: Obtenir un espace de travail WCM est une opération coûteuse. Par conséquent, vous devriez mettre en cache l espace de travail de l utilisateur courant afin d'augmenter les performances. Le plus simple est l'utilisation de la mise en cache automatique avec le code utilisant les wcm: initworkspace JSP tag: <%@ page import="com.ibm.workplace.wcm.api.*" %> <% // Créer l espace de travail WCM (mise en cache automatique dans la session) %> <wcm:initworkspace user="<%= request.getuserprincipal() %>" > <% // Obtenir la référence pour créer ou définir l espace de travail Workspace usersworkspace = (Workspace) pagecontext.getattribute(workspace.wcm_workspace_key); //Travailler avec l espace de travail... 28

Obtenir un Workspace Utiliser le cache Best Practice Vous pouvez aussi gérer le cache vous-même comme dans l extrait de code provenant de la Custom launch Page, chapitre 3.4.1.2 des Best Practices sur developerworks et dans le wiki WCM Workspace theworkspace = getcurrentusersworkspace(request, response, request.getuserprincipal() ); // Travailler avec l espace de travail... Workspace getcurrentusersworkspace(httpservletrequest request, HttpServletResponse response, Principal currentuser) throws IOException { String workspacesessionkey = currentuser.getname() + Workspace.WCM_WORKSPACE_KEY; Workspace theworkspace = (Workspace) request.getsession().getattribute(workspacesessionkey); if (theworkspace == null) { // theworkspace n était pas en session, création d un nouvel espace de travail et monté en session try { // Obtenir l espace de travail pour l utilisateur courant theworkspace = WCM_API.getRepository().getWorkspace(currentUser); // Stockage de l espace de travail dans la session afin d améliorer les futurs accès request.getsession().setattribute(workspacesessionkey, theworkspace); } } } // Gestion des erreurs à retrouver dans l exemple complet, volontairement omis ici afin de simplifier le code 29

RenderingContext Introduction Un rendering context contient toutes les informations requises pour afficher un objet. Cela inclut les informations comme le chemin de l objet à afficher et tous les autres paramètres Valable pour les objets requêtés Cela est créé en se basant sur l utilisateur courant Peut être créé via l espace de travail Ceci est très souvent utilisé lorsque l on souhaite accéder à WCM à partir d une portlet développée spécifiquement Il est nécessaire avant tout d accéder au contenu WCM à afficher 30

RenderingContext Travailler avec le contexte... 31 //Obtenir le contexte courant. RenderingContext renderingcontext = (RenderingContext)request.getAttribute(workspace.WCM_RENDERINGCONTEXT_KEY); //Obtenir le contenu courant. Content thecontent = renderingcontext.getcontent(); //Obtenir le chemin de la zone de site. SiteArea[] allsiteareas = renderingcontext.getsiteareas(); //Obtenir l ID de la zone de site courante utilisée pour le context de l utilisateur (renderingcontext). SiteArea contextsitearea = allsiteareas[allsiteareas.length-1]; //Obtenir les zones de site enfant de la zone de site courante. DocumentIdIterator directchildren = contextsitearea.getdirectchildren(); //Itérer sur les zones de site enfant. while(directchildren.hasnext()) { DocumentId child = directchildren.nextid();... }...

RenderingContext Créer un nouveau contexte... <%@ page import="com.ibm.workplace.wcm.api.*" %> // Créer un espace de travail WCM (mis en cache dans la session automatique) <wcm:initworkspace user="<%= request.getuserprincipal() %>" /> <% // Obtenir la référence de l espace de travail créé ou récupéré Workspace usersworkspace = (Workspace) pagecontext.getattribute(workspace.wcm_workspace_key); //Créer le contexte d affichage RenderingContext context = workspace.createrenderingcontext(request, response, new HashMap(), "http://localhost:10038/wcm", "connect"); //Définir le chemin du contenu à afficher context.setrenderedcontent("/sitea/sitearea1/sitearea1-1/thecontent");... 32

RenderingContext Afficher des contenus... //Création du StringBuffer qui contient le code HTML à utiliser StringBuffer html = new StringBuffer(); html.append( <div><p> );... // Obtenir la référence de l espace de travail créé ou récupéré Workspace usersworkspace = (Workspace) pagecontext.getattribute(workspace.wcm_workspace_key); // Créer le contexte d affichage RenderingContext context = workspace.createrenderingcontext(request, response, new HashMap(), "http://localhost:10038/wcm", "connect"); // Définir le chemin du contenu à afficher context.setrenderedcontent("/sitea/sitearea1/sitearea1-1/thecontent"); // Obtenir le rendu HTML String renderedcontent = workspace.render(context); //Ajouter le rendu HTML au buffer HTML html.append(renderedcontent);... 33

Gestion des contenus méthode workspace.createcontent API createcontent public com.ibm.workplace.wcm.api.content createcontent( com.ibm.workplace.wcm.api.documentid authoringtemplateid, com.ibm.workplace.wcm.api.documentid parentsiteareaid *, com.ibm.workplace.wcm.api.documentid siblingid *, int position *) * Optionel Créer un nouveau contenu basé sur un modèle de création dans la zone de site parent Le modèle ID qui est indiquée doit être un modèle qui existe déjà dans le système WCM Exemple: 34

Gestion Lotus des Tech Days contenus 2008 Trouver une zone de site ou un modèle de création Best Practice: Définir la bibliothèque courante seulement si différente de celle par défaut (6.0.1 et précédente) ou courante (6.0.1.1+)... //Obtenir la bibliothèque pour travailler avec en utilisant son nom si ce n est la bibliothèque par défaut DocumentLibrary documentlibrary = workspace.getdocumentlibrary("content"); //Définir la bibliothèque pour travailler avec lors de cette session (vous devez stocker la bibliothèque courante en session pour pouvoir la définir de nouveau plus tard) workspace.setcurrentdocumentlibrary(documentlibrary); //Trouver la zone de site parent DocumentIdIterator parentiter = workspace.findbyname(documenttypes.sitearea, Travel"); DocumentId parentsitearea = null; if(parentiter.hasnext()) { parentsitearea = parentiter.nextid(); } //Trouver le modèle de création DocumentIdIterator authoringiter = workspace.findbyname(documenttypes.authoringtemplate, "Article"); DocumentId authoringtemplate = null; if(authoringiter.hasnext()) { authoringtemplate = authoringiter.nextid(); }... 35

Gestion des contenus Créer et sauvegarder un contenu... //Créer un contenu vide en spécifiant un modèle de création, une zone de site parent, un contenu apparenté, une position Content newcontent = workspace.createcontent(authoringtemplate, parentsitearea, null, ChildPosition.END); //Définir le nom du contenu newcontent.setname("travel - Be the first tourist on the moon"); //Sauvegarder le contenu workspace.save(newcontent);... 36

Gestion des contenus Déplacer un... workflow dans un workflow //Obtenir l ID du contenu en utilisant findbyname DocumentIdIterator contentiter = workspace.findbyname(documenttypes.content, "Travel - Be the first tourist on the moon"); DocumentId contentid = null; if(contentiter.hasnext()) { contentid = contentiter.nextid(); } //obtenir le contenu en utilisant getbyid Content content = (Content)workspace.getById(contentId); //Déplacer le contenu à l étape suivante du workflow content.nextworkflowstage(); //Sauvegarder le contenu workspace.save(content);... 37

Rechercher des contenus méthode workspace.contentsearch API contentsearch public com.ibm.workplace.wcm.api.documentiditerator contentsearch ( ) com.ibm.workplace.wcm.api.documentid templateid, com.ibm.workplace.wcm.api.documentid[] siteareaids, com.ibm.workplace.wcm.api.documentid[] categoryids, java.lang.string[] keywords, boolean matchallkeys * * change selon 'ou' et et' Tous les contenus qui correpondent aux critères de recherche seront retournés, en regard de leur statut (inclut également les contenus non publiés) Le composant de recherche se comporte de la même manière que le composant Menu Si des zones de site ont été spécifiées, tous les parents et descendants seront inclus dans la recherche L ordre d affichage des résultats n est pas garanti. Tous les paramètres excepté matchallkeys sont optionels 38

Rechercher des contenus Best Practice: Autres Utiliser les API de méthodes recherche seulement si ce n est API pas possible au travers des composants WCM workspace.findcontentbyauthoringtemplate ** workspace.findcontentbycategory ** workspace.findcontentbyworkflowstage Workspace.findByType ** Workspace.findContentByPath Workspace.findContentModifiedBetween ** Workspace.findContentModifiedSince ** Workspace.findByPath * Workspace.findContentByWorkflowStage * Workspace.findByName ** * Nouveau en 6.0.1.2 ** Paramètre additionnel d étape de flux de travaux en 6.1 permettant de meilleures performances 39

Rechercher des contenus Configurer le Menu via les API Un exemple pour combiner les API et le composant Menu Utiliser les paramètres Query String pour gérer dynamiquement le composant Menu, exemple pour sélectionner les catégories <wcm:initworkspace user="<%= request.getuserprincipal() %>" /> <% //Obtenir le contexte de rendu courant RenderingContext context = (RenderingContext)request.getAttribute(Workspace.WCM_RENDERINGCONTEXT_KEY); //Obtenir le chemin du contexte courant String currentpath = context.getpath(); //Par exemple, rechercher sur des catégories spécifiques Map myparams = new HashMap(); myparams.put("cat", Cat1,Cat2"); %> //Définir le contexte pour le contexte courant et les paramètres Query String <wcm:setexplicitcontext path="<%=currentpath%> requestparameters="<%=myparams%>"/> //Afficher le Menu <wcm:librarycomponent name="themenu"/> 40

Rechercher des contenus Utiliser le composant Menu avec les API Comme les composants Menu sont la façon la plus rapide de réaliser une recherche et sont plus facilement configurables, vous pouvez utiliser un composant Menu pour construire votre liste de contenus pour ensuite travailler avec les API Mettre un lien vers l article dans Conception de composant pour chaque contenu correspondant (en utilisant <PlaceHolder tag=«sitepath»>) et un separateur unique (comme «~#») et utiliser ce séparateur dans votre code pour obtenir la liste de vos contenus Remarque: si vous souhaitez contrôler le mappage des modèles de présentation avec votre contenu, vous devez utiliser un menu qui met en œuvre des iframes avec le contenu affiché dans chaque iframe 41

Rechercher des contenus Utiliser le composant Menu avec les API 42 Obtenir une liste de contexte de rendu (chemin de site) pour chaque contenu trouvé séparé par un séparateur unique (ici ~# )

... //Définir le nom du composant Menu à utiliser String MENU_NAME = "MenuFeatureArticle"; //Trouver le composant Menu DocumentIdIterator menuiter = workspace.findcomponentbyname(menu_name); LibraryComponent menu = null; if (menuiter.hasnext()) { //Obtenir l ID du document pour le Menu DocumentId menuid = (DocumentId) menuiter.nextid(); //Obtenir le composant Menu depuis l espace de travail de l admin menu = (LibraryComponent) workspace.getbyid(menuid); }... Rechercher des contenus Utiliser le composant Menu avec les API 43

... Rechercher des contenus Utiliser le composant Menu avec les API //Si vous avez trouvé le composant menu alors parcourez la liste et travaillez sur chaque élément if(menu!= null) { //Afficher le Menu et capturer la sortie String menuoutput = workspace.render(renderingcontext, menu); //Tokenizer la sortie StringTokenizer st = new StringTokenizer(menuOutput, "~#"); //Parcourir au travers des tokens, don t chacun représente une partie des contenus while(st.hasmoreelements()) { String tokenpath = st.nexttoken(); //Définir le chemin pour le contenu courant renderingcontext.setrenderedcontent(tokenpath); //Réaliser vos actions avec les API, comme obtenir le contenu à partir du contexte courant workspace.render(renderingcontext); 44 }... }...

Rechercher des contenus Utiliser le composant Menu avec les API Nouveau en 6.1: Obtenir RenderingContext en JSP depuis le composant Menu (et Navigateur, Recherche, Contenu ou Composant Taxinomie) /** * Retourne la valeur du DocumentID du résultat courant. Cette méthode retournera seulement * une valeur le composant JSP est invoqué à partir d un composant Menu, Navigateur, * recherche, contenu ou composant Taxinomie et donc lorsque le tag initworkspace est utilisé * dans la page. Dans les autres cas, le résultat null est retourné. * * Retourne le DocumentID du résultat courant ou null si aucun résultat existe. */ public DocumentId getcurrentresultid(); 45

Additionel 6.1 performance APIs Build better performing solutions by batching requests to the JCR, backported to 6.0.1.3 /** * Retourne l objet pour l ID donné * * Cette méthode permet d optimiser les performances afin d obtenir un élément pour les opérations de rendu et de lecture. * Obtenir l ID avec l option asreference égale à true est plus rapide et l objet n est pas modifié par le code client * Si le code client nécessite d éditer le <code>document</code> alors asreference doit à false. */ public Document getbyid(documentid id, boolean asreference ); /** * Retourne la liste des objets <CODE>Document</CODE> comme <CODE>DocumentId</CODE> comme un * <CODE>DocumentIterator</CODE>. Les IDs sont passés comme un <CODE>DocumentIdIterator</CODE>. * Cette méthode permet d optimiser les performances lors des opérations de rendu et de lecture. */ public DocumentIterator getbyids(documentiditerator documentiditerator, boolean asreference); /** * Créer un nouveau <CODE>DocumentIdIterator</CODE> d un tableau de données <CODE>DocumentId<CODE>. */ public DocumentIdIterator createdocumentiditerator(documentid[] documentids); 46

Améliorer des pages de démarrage personalisées Spécifier un modèle de création pour créer un nouveau contenu, Exemple... //Trouver le modèle de création pour un article. DocumentIdIterator authoringiter = workspace.findbyname(documenttypes.authoringtemplate, "Article"); DocumentId authoringtemplate = null; if(authoringiter.hasnext()) { authoringtemplate = authoringiter.nextid(); } %> <br/> <a href="?wcmauthoringaction=new&type=com.ibm.workplace.wcm.api.wcm_content&atid=<%=""+authoringt emplate%>"> Create new Article</a> <br/> <a href="?wcmauthoringaction=openmainview&view=contentbytitle"> Open content by title</a> <br/> <a href="?wcmauthoringaction=openmainview&view=contentbysitearea"> Open content by site area</a>... 47

Améliorer des pages de démarrage personalisées Exemple de l URL généré pour Create new Article : http://<host_name>/.../?wcmauthoringaction= new&type=com.ibm.workplace.wcm.api.wcm_c ontent&atid=com.ibm.workplace.wcm.api.wcm_ AuthoringTemplate/Article/3db2eb004203716d92 d9fe233ec2ac0d/false 48

Améliorer des pages de démarrage personalisées Plus d exemples disponibles dans les Best Practices sur developerworks et dans le Wiki Page de démarrage personalisées à partir desquelles sont créés des contenus en utilisant des modèles de création disponibles (ch 3.4.2.1) Page de démarrage personalisée qui fournit une interface d approbation spécifique (ch 3.4.2.2) 49

Customiser des éléments en utilisant les JSP Consulter l Info Center pour plus d informations sur Customizing elements using JSP dans un modèle de création Utiliser seulement lorsque ce n est pas possible Out-of-the-box, comme fournir une liste dynamique provenant de sources externes 50

Résumé des Best Practices Déjà mentionné Si vous avez besoin une gestion multilingue des erreurs via JSP, utiliser Java Resource Bundles en utilisant les API Les fichiers JSP doivent être sauvegardés, les fixes sont succeptibles de les supprimer Les fichiers JSP ne sont pas syndiqués et doivent être inclus dans le processus de transfert Terminer un espace de travail avec la balise End dans les JSPs utilisées hors contexte WCM (pas pour les composants JSP) Mettre en cache l objet espace de travail pour chaque utilisateur dans la session Définir la bibliothèque seulement si différente de celle par défaut (6.0.1 et précédente) ou courante (6.0.1.1+) Évitez les API pour construire des menus personnalisés préférer l utilisation de composant Menu à la place (combiné avec les API si besoin) 51

Résumé des Best Practices Davantage de Best Practices Utiliser Workspace.login et Workspace.logout autour de toutes les appels via les méthodes API WCM qui seront exécutés dans la requête actuelle (pas pour les composants JSP) Nécessite PK50703 pour 6.0.1.1 (voir ifix readme pour un usage correct) Pour les applications Multi-Thread, vous devrez faire un appel login/logout par thread Pour les applications longue durée, il sera nécessaire de se relogguer périodiquement afin de maximiser les performances (par exemple, avant qu un timeout de session apparaisse) Regrouper les fonctionnalités réutilisable dans une JSP de référence ; utiliser jsp:include pour l intégrer Utiliser getcomponentbyreference à la place getcomponent lorsqu il n est pas nécessaire d éditer ou d ajouter à un autre conteneur (meilleures performances) Utiliser le cache pour les résultats d une JSP en utilisant le servlet-caching ou WCM caching Comme les DocumentID s des API Web Content Management contiennent des informations sur le statut du flux de travaux, si vous redémarrez le flux de travaux OU rejetez un document, alors souvenez vous d obtenir le nouveau DocumentID de l objet et de ne pas utiliser l ancien DocumentID. Utiliser tout d abord les fonctionnalités Out-of-the-box, puis les tags JSP et seulement après les API 52

Résumé Scénarios IBM Lotus Web Content Management Java Server Page (JSP) Introduction Balises JSP Composants JSP Exemples JSP Page de démarrage personalisée IBM Lotus Web Content Management Application Programming Interface (API) Introduction Obtenir un Workspace RenderingContext Gérer les contenus Rechercher des contenus Améliorer des pages de démarrage personnalisées Customiser les éléments utilisant des JSP Résumé Best Practices 53

Information et Ressources IBM Lotus Web Content Management Home Page http://www.ibm.com/software/lotus/products/webcontentmanagement/ IBM WebSphere Portal Information Center documentation http://www.ibm.com/developerworks/websphere/zones/portal/proddoc.html Java doc pour IBM Lotus Web Content Management API http://<host>/wps/wcm/webinterface/api-javadoc/index.html Stocké dans <was_profile_root>\appserver\profiles\wp_profile\installedapps\<node name>\wcm.ear\ilwwcm.war\webinterface\ developerworks articles + Forum: Best Practices pour IBM Workplace Web Content Management V6 http://www.ibm.com/developerworks/websphere/library/techarticles/0701_devos/0701_devos.html Multi-locale site management avec IBM Workplace Web Content Management http://www-128.ibm.com/developerworks/lotus/documentation/webcontentmanagement/d-lsmultilocalesites/ IBM WebSphere Portal / Lotus Web Content Management Best Practices Wiki http://www-10.lotus.com/ldd/portalwiki.nsf (section spéciale pour les API) 54

Questions? 55