Exemples de créations de nouveaux service-portails

But de ce document

Montrer comment développer de nouveaux service-portails en créant de nouvelles actions. Dans ce document, nous allons créer :

  • L'application “MONAPPLI”
  • 7 actions
  • 7 services-portails

Pré-requis

Pour suivre ce document, il est conseillé d'avoir lu la documentation concernant la :

Pourquoi créer une nouvelle application ?

Pour créer un nouveau service-portail, il faut créer une nouvelle action. Cette action doit être enregistrée dans le fichier .app d'une application Freedom. Il serait assez logique d'ajouter ces actions au fichier “WEBDESK/WEBDESK.app” mais ce fichier sera remplacé lors la prochaine mise à jour de Freedom et nos actions seront perdues. Nous allons donc créer une nouvelle application “MONAPPLI” qui ne sera pas visible dans le menu général de Freedom mais servira à accueillir nos actions.

Installation de l'application et des exemples de service-portails

Pour installer cette nouvelle application et ses service-portails, voici la procédure :

  • Télécharger le fichier ”monappli.tgz” dans le dossier ”/usr/share/what”
  • Décompresser ce fichier avec cette commande “tar -xvzf monappli.tgz”
  • Bien s'assurer que l'utilisateur d'apache (www-data sous UBUNTU, httpd sous FEDORA, …) est “chowner” du répertoire “MONAPPLI”,
  • Lancer la mise à jour de Freedom avec cette commande ”/usr/share/what/wcheck”

Une fois l'installation effectuée, vous allez retrouver le dossier “Nouveaux service-portails” sous la racine de “Freedom Master” et les nouveaux service-portails seront disponibles sur le portail :

Nous allons maintenant décrire le fonctionnement de chaque service-portail

Service-portail "Test action1"

Voici à quoi ressemble notre premier service-portail :

Ce dernier ne sert pas à grand chose car il se contente d'afficher “Bonjour le monde”. Cependant il nous permet de décrire les fichiers nécessaires à son fonctionnement. Pour faire fonctionner ce service-portail, nous avons crée ou modifié les fichiers suivants :

action1.php

Voici le contenu de ce fichier :

<?php

include_once('FDL/Lib.Dir.php');

function action1(&$action) {
  header('Content-type: text/xml; charset=utf-8');
  $action->lay->setEncoding("utf-8");
  return;
}

?>

Remarques :

  • Il est important que le nom de la fonction (action1) soit le même que celui du fichier .php et que le nom de la fonction soit le même que celui de l'action à créer.
  • Le fichier .php est indispensable, même si celui-ci ne fait aucune action comme dans cet exemple.

Layout/action1.xml

Voici le contenu de ce fichier :

<?xml version="1.0" encoding="UTF-8"?><freedomsvc><![CDATA[

<div>
Bonjour le monde
</div>

]]></freedomsvc>

Remarque : Le contenu à afficher dans le service-portail doit obligatoirement être mis à l'intérieur d'un “div”.

MONAPPLI.app

Cette action est enregistrée dans le fichier “MONAPPLI.app”. Voici l'extrait du fichier “MONAPPLI.app” décrivant l'action “Action1” :

array(
           "name"              =>"ACTION1",
           "short_name"        =>"Action n°1",
           "acl"               =>"ONEFAM_READ"
           ),

Document service-portail "Test action1"

Pour finir, nous avons importé le document service-portail “Test action1” grâce au fichier OOo “monappli.ods”. Voici un extrait de ce fichier :

Service Portail <specid> <fldid> Title Consultation
ORDERPORTAL_SERVICE psvc_titlepsvc_vurl
DOCPORTAL_SERVICEMONAPPLISP01MONAPPLIDIRTest action1[CORE_BASEURL]app=MONAPPLI&action=ACTION1

Voici comment est paramétré ce service-portail :

Service-portail "Test action2"

Ajouter copie d'écran

Ce deuxième exemple montre comment modifier le fichier .php pour définir le contenu du fichier .xml. Ce fichier permet de :

  • définir le titre (Par défaut le titre est celui du service portail)
  • L'heure de dernière mise à jour (affichée en mettant la souris sur le titre du service-portail)
  • Le contenu

action1.php

Le fichier .php permet de définir le contenu des variables du fichier .xml avec la fonction “lay→set”

  $action->lay->set("uptime" , strftime("%H:%M %d/%m/%Y", time()));
  $action->lay->set("titre"  , "Ceci est mon nouveau titre");
  $action->lay->set("contenu", "Contenu de mon service-portail");

action1.xml

Les variables (texte entre crochet) seront remplacées par les données envoyées par le fichier .php

<?xml version="1.0" encoding="UTF-8"?><freedomsvc uptime="[uptime]"
title="[titre]"><![CDATA[

<div>
[contenu]
</div>

]]></freedomsvc>

Service-portail "Test action3"

Cette action permet de récupérer avec la fonction “GetHttpVars” le titre indiqué dans le document service-portail pour ensuite l'afficher. Si le titre n'est pas défini, un titre par défaut est indiqué. Voici un extrait du fichier “action3.php” :

  $title = GetHttpVars("title", "Ceci est mon titre par défaut");
  $action->lay->set("titre"  , $title);

Et voici comment est paramétré le document service-portail :

Service-portail "Test action4"

Le but de cette action est de montrer qu'il est possible d'utiliser n'importe quel code HTML dans le service-portail. Le fichier .php de cette action est le même que le précédent par contre, le fichier .xml est différent. Voici un extrait du fichier “action4.xml” :

<h1><img src="/Images/freeeye.gif">[titre]</h1>	
<b>[contenu]</b><br>
<small>Dernière mise à jour le : [uptime]</small><br>
<a href="http://www.freedom-ecm.org">www.freedom-ecm.org</a>

Service-portail "Test action5"

Cette action permet de récupérer et d'afficher la liste des familles sous forme de lien. Chaque lien permet de créer un document de la famille correspondante. Voici un extrait du fichier “action5.php” permettant de récupérer la liste des familles :

  $dbaccess = getParam("FREEDOM_DB");
  $tclass = GetClassesDoc($dbaccess, $action->user->id, 0, "TABLE");
  foreach($tclass as $k => $v) {
  	$contenu[] = array ( "id"   => $v["id"],
                             "title"  => $v["title"] );
  }
  $action->lay->SetBlockData("contenu", $contenu);

Voici un extrait du fichier “action5.xml” permettant d'afficher la liste des familles :

[BLOCK contenu]
  <a title="[title]"
     href="[CORE_STANDURL]app=GENERIC&action=GENERIC_EDIT&classid=[id]"          
     target="_blank">[title]
  </a></br>     
[ENDBLOCK contenu]

Service-portail "Test action6"

Cette action montre comment ajouter une liste déroulante permettant de sélectionner la famille à créer. Voici un extrait du fichier “action6.php” permettant de récupérer la liste des familles pour alimenter le champ “SELECT” :

  $dbaccess = getParam("FREEDOM_DB");
  $query = new QueryDb($dbaccess,"DocFam");

  $query->AddQuery("doctype='C'");
  $query->order_by="lower(title)";
  $result=$query->Query(0,0,"TABLE");

  $fam[] = array ( "value" => 0, "sel" => "", "label" => "(Sélectionnez une
 famille)" );
  foreach($result as $k => $v) {
    $fam[] = array ( "value" => $v["initid"],
		     "sel" => ($idfam==$v["id"] ? "selected" : ""),
                     "label" => $v["title"] );
  }
  $action->lay->SetBlockData("fam", $fam);

  $creer=false;
  if ($idfam>0) $creer=true;

  $action->lay->set("creer", $creer);
  $action->lay->set("idfam", $idfam);

Voici un extrait du fichier “action6.xml” pour afficher le SELECT et afficher le lien seulement si une famille a été sélectionnée :

<select name="idfam" style="width:70%;" onchange="submitService(event)">
	[BLOCK fam]
		<option value="[value]" [sel]>[label]
	[ENDBLOCK fam]
</select>
	
[IF creer]	
	<a title="Créer"
             href="[CORE_STANDURL]app=GENERIC&action=GENERIC_EDIT&classid=[idfam]"              
             target="_blank">Créer</a></br>     
[ENDIF creer]

Service-portail "Test action7"

Ce service-portail permet comme le précédent de sélectionner une famille et d'afficher un lien pour pouvoir créer des documents de cette famille. Cependant ce service portail utilise deux actions. La première action permet d'afficher le service-portail et le deuxième permet de le configurer.

Le document service-portail doit indiquer l'action permettant de configurer le service-portail :

modules/freedom-webdesk/exemple_nouveau_service_portail.txt · Dernière modification: 04/03/2010 14:34 (édition externe)