Domino Références : Site francophone de ressources pour les développeurs Lotus Notes / Domino Domino Références
Site francophone de ressources pour les développeurs Notes/Domino
Annuaire Articles Forums Contact
Recherche
 
Mot exact résultats
Au Sommaire ...
Annuaire commenté des sites traitant de Lotus Notes/Domino
Articles d'actualité
Les forums de discussion
Une remarque, une critique, un encouragement. N'hésitez pas à me contacter.
The Team that meets in Forum.
Newsletter
email:   
s'abonner se désabonner 
Statistiques
 Stats du site

 

Domino et le Web
par Olivier

Après avoir passé des heures à m'arracher les cheveux pour faire un site web avec domino, j'ai fini par trouver deux/trois techniques qui peuvent simplifier grandement la vie des devs web avec domino.

Un des points les plus casse-bonbon de domino est la présentation web.

Ma solution consiste à se passer de domino pour la présentation ; le javascript le fera à sa place.

Imaginons
- une vue " maVue " avec trois colonnes : nom, prenom, mail.
- un masque de vue $$ViewTemplate for maVue

Pour gérer les données issues de la vue, il faut les passer au javascript en appelant une fonction qui va enregistrer tout ça.

La formule de la colonne nom est : "ajoutTab(' "+nom+" ', "
La formule de la colonne prenom est : ' "+prenom+" ', "
La formule de la colonne mail est : ' "+mail+" '); "

Ainsi la vue affichera des lignes du style :

ajoutTab('tonNom','tonPrenom','tonMail@tonMail.com');

Dans le masque de vue , on passe en mode HTML-relais.
On tape l'entete du tableau HTML et un peu de script.

<table>
<tr><td>nom</td><td>prenom</td>mail</td></tr>
<script>

Ensuite on intègre la vue (création/élément intégré/vue) toujours en HTMLrelais
Puis on tape

</script>
</table>

Dans l'entête JS du masque on ajoute la fonction de javascript suivante :

noms= new Array() ;
prenoms= new Array() ;
mails= new Array() ;

function ajoutTab(nom,prenom,mail){
noms[noms.length]=nom ;
prenoms[prenoms.length]=prenom ;
mails[mails.length]=mail ;
}

Maintenant les données peuvent être chargées dans des arrays javascript il ne reste plus qu'à les afficher dans un tableau HTML
Créons une fonction qui va écrire une ligne de tableau HTML. Elle prend en paramètre le numéro de la ligne à afficher.

function ecrisUneLigne(indice){
uneLigne="";
uneLigne= "<tr>\n"
uneLigne=+"<td>"+noms[indice]+"</td><td>"+prenoms[indice]+"</td><td>"+mails[indice]+"</td>\n";
uneLigne=+"</tr>\n";
return uneLigne;
}

Revenons dans les balises script, entre la vue intégrée et la balise </script> on ajoute ceci :

if(noms.length>0){
for (i=0 ;i<noms.length ;i++){
Document.write(ecrisUneLigne(i)) ;
}
}else{
document.write("<tr><td colspan=3>PAS DE DOCUMENTS !</td></tr>");
}


L'avantage de cette technique c'est que dans les masques vous ne vous souciez plus de présentation tout est concentré dans les masques de vues.

Dernier détail, il arrive que le contenu de la vue comporte des guillemets et des apostrophes ce que javascript supporte assez mal.
La solution :
Dans les formules de colonnes mettre @ReplaceSubstring(monChamp;"\'";"\\\'")
Mais la solution que je préfère est de tout encoder au format URL, ainsi plus de problèmes d'accent, de guillemets ou autre.
@URLEncode("";monChamp)

Par contre dans la fonction javascript ecrisUneLigne, on doit faire le decodage avec la méthode unescape :

function ecrisUneLigne(indice){
uneLigne="";
uneLigne= "<tr>\n"
uneLigne+="<td>"+unescape(noms[indice])+"</td>";
uneLigne+="<td>"+unescape(prenoms[indice])+"</td>";
uneLigne+="<td>"+unescape(mails[indice])+"</td>\n";
uneLigne+="</tr>\n";
return uneLigne;
}

Petit plus de cette technique :
Les vues regroupent souvent énormément de documents, et pour nos gentils interanutes, on aimerait pouvoir n'afficher qu'un seul type de documents.
Imaginons que j'ai un masque A possédant des champs " nom ", " prenom ", " mail " et " maCategorie ".
Les documents issus de ce masque peuvent voir leur champ " maCatagorie " prendre trois valeurs :
" maCatToto ", " maCatTiti " et " maCatTutu "
Le but du jeu est de n'afficher que les documents appartenant à la catégorie " maCatTutu ".

Dans ce cas, la vue qui sera alliée au masque de vue (cf plus haut) devra avoir en première colonne le champ " maCategorie ". cette colonne devra être catégorisée et invisible à l'affichage. (options des colonnes). Les trois autres colonnes sont définies par les formules citées plus haut.
Dans le masque de vue, la vue intégrée possède une propriété " n'afficher qu'une seule catégorie ".
Il suffit de mettre " maCatTutu " et hop ! domino n'affichera que les documents correspondant à cette catégorie.

Remarquez cette solution est bien mais pas top. Si on a 150 options différentes pour le champs maCategorie, il risque d'être assez complexe de faire 150 vues.

La solution est de passer un paramètre dans l'url.
Ex : http://serveur/maBase.nsf/maVue ?openView&monParam=maCatTutu&login
Avec un champ nommé " query_string_decoded " on récupère le morceau d'url après le point d'interrogation.
Ajoutons un autre champ " monParam "
Sa formule sera :
@left( @right(query_string_decoded ; " monParam= ") ; " &login " )

et on obtient le contenu de monParam , c'est à dire " maCatTutu ".
il suffit ensuite de mettre le nom du champ " monParam " dans la propriété de la vue intégrée et c'est bon.
Il restera plus qu'a faire une liste déroulante qui rechargera la page avec le bon paramètre.

Enfin dernier truc :
Il peut arriver qu'on ait besoin de plus d'un paramètre d'affichage.
En reprenant l'exemple précédent, le masque A possède en plus de " maCategorie " un autre champ " maSousCategorie ".

La solution consiste à modifier la première colonne de la vue (celle qui est catégorisée) :
maCategorie+ " # "+maSousCategorie

Il suffit ensuite dans la propriété de la vue de reconstituer cette paire de valeurs en utilisant le même système de récupération de variables d'url que tout à l'heure.

Mise à jour: 18/09/2003
Conception: Lionel, 2001-2002