SharePoint : Bug natif dans le modèle de liste "Forum de discussion"

Un paquet de CAML !
Quelque soient les droits des utilisateurs dans un forum de discussion SharePoint, le lien « Afficher les propriétés » apparait pour chaque message. Or ce lien redirige vers les propriétés du message, où il est possible de le modifier, le supprimer…
Résultat : l’utilisateur va se retrouver devant une page d’erreur quand il tentera ces actions.
Pour corriger ce dysfonctionnement natif, le mieux et de créer son propre modèle de liste DiscussionList (en copiant-collant l’original), et de corriger le fichier %FEATURE%DiscussionsListDiscussschema.xml
Dans notre cas, on va simplement afficher ce lien uniquement aux utilisateurs qui sont l’auteur du message. A la ligne 351du fichier, il faut remplacer le code défécteux par celui-ci (entre le </Switch> de la ligne 351 et le <IfHasRights> de la ligne 354) :
          <HTML><![CDATA[<td style="border-style:none" nowrap="TRUE"><div>]]></HTML>
<IfEqual>
<Expr1>
<Column Name="Author"/>
</Expr1>
<Expr2>
<UserID></UserID>
</Expr2>
<Then>
<HTML><![CDATA[<a id="DisplayLink]]></HTML>
<Field Name="ID" />
<HTML><![CDATA[" href="]]></HTML>
<URL Cmd="EDIT" />
<HTML><![CDATA[" ONCLICK="GoToLink(this);return false;" target="_self">]]></HTML>
<HTML><![CDATA[<NOBR>Afficher les propriétés</NOBR></a>]]></HTML>
</IfHasRights>
</Then>
</IfEqual>


Bien sûr, tout ceci peut être libre de toute fantaisie !

XSL / Sharepoint : "L'affichage spécifié n'est pas valide"

C’est pas du 16/9ème ?
… ou encore en anglais : « The specified view is invalid ».
Cette erreur peut intervir lorqu’on créé une DataFormWebPart (DFWP) sous le SharePoint Designer (en partant d’une webpart native (ListViewWebPart), et en la convertissant en vue XSL).
Lorsqu’on va exporter cette webpart, et l’intégrer dans une page, l’erreur va survenir. Il va alors falloir aller dans la page de maintenance et supprimer la WP.
Certains forums donneront cette solution : Editer le fichier *.webpart dans un bloc-note, et supprimer la propriété « viewflag« . Mais cette action à des effets de bord bien plus perfides.
Je pense (pour l’instant) que la meilleure chose à faire et de partir d’une source de données (au lieu d’une webpart native) pour créer sa DFWP.
 

Expressions régulières : mot de passe complexe

3 heures d’enquête pour ça !
Voici l’expression régulière pour valider un mot de passe constitué ainsi :
– Doit avoir 6 caractères exactement
– Doit contenir 4 chiffres, 1 seule lettre (parmis A, B, C, D et E) et 1 seul caractère spécial (# ou @)
Tout ceci dans n’importe quel ordre.
L’espression régulière est donc la suivante :
^(?=(.*[0-9].*){4})(?=.*[A-E])(?=.*[@#]).{6}$
La difficulté provient de « 1 seule lettre » et « 1 seul spécial ». Ce qui revient à « 4 chiffres exactement ».
« 4 chiffres exactement » se traduit par la « look-back assertion » ou « traitement lookaround » suivant : (?=(.*[0-9].*){4})
 
Tests :

A#1234 : vrai

AB#123 : faux
1A#@12 : faux
1A#312 : vrai
 

XSL / Sharepoint : Doublons des entrées dans les filtres (DataFormWebParts)

La chose faite d’houblon.
Dans le cas de DataFormWebParts à sources de données aggrégées, il se peut que les filtres des en-têtes contiennent plusieurs fois les mêmes valeurs.
Ce petit bug d’affichage est corrigible en allant manipuler le code XSL de la page (via le SharePoint Designer).
Dans le template nommé « dvt.filterfield« , trouver une boucle for-each qui appelle le template « filteroption » :
     <xsl:call-template name="dvt.filteroption">
<xsl:with-param name="name" select="$fieldname" />
<xsl:with-param name="value" select="." />
<xsl:with-param name="type" select="$fieldtype" />
</xsl:call-template>

La boucle qui appelle ce template est censée faire un « distinct » sur les données à lister, mais ça ne fonctionne pas toujours.
Les données sont cependant triées, on va donc autoriser l’affichage de la donnée à chaque fois qu’on change de valeur dans la boucle. Pour cela, il suffit d’encadrer cet appel par la condition suivante :
     <xsl:variable name="OptionValue" select="ddwrt:NameChanged(string(.), 0)" />
<xsl:if test="string-length($OptionValue)">


          <xsl:call-template name="dvt.filteroption">
<xsl:with-param name="name" select="$fieldname" />
<xsl:with-param name="value" select="." />
<xsl:with-param name="type" select="$fieldtype" />
          </xsl:call-template>
     </xsl:if>
 
NB : NameChanged teste si une valeur change depuis sa dernière affectation.

XSL / XPath / Sharepoint : Problème du double encodage des données.

L’esperluette m’a tué
J’ai rencontré ce problème en créant une « DataFormWebPart » sous le Sharepoint Designer. Les données finales affichées (HTML) étaient doublement encodées par rapport à la source de données.
Prenons cet élément d’une liste SharePoint :
L'iPad est nul
A travers une DataFormWebPart créée sous le sharepoint Designer, il ressortira ainsi
L&quot;iPad est nul
 
Cause : il y a eu double encodage : L'iPad est nul -> L&quot;iPad est nul -> L&amp;quot;iPad est nul
Et sur le navigateur, le résultat est celui-ci : L&quot;iPad est nul
 
Le problème vient du XSL, au moment d’afficher la valeur :
<xsl:value-of select="@Valeur"/>
Il faut ajouter l’attribut suivant : disable-output-escaping= »yes »:
<xsl:value-of select="@Valeur" disable-output-escaping="yes" />
 
Sans aller dans les tréfonds du code XLS, le Sharepoint designer peut aider à la tache :

  • Se mettre en mode « création »
  • Survoler l’un des éléments de la webpart
  • Changer le type d’affichage (passer le « texte brut » à « texte enrichi »).

 
 
 

Mémo CSS

  • L’outil gratuit « DebugBar » sous IE est très pratique, et permet notamment d´afficher le DOM d´une page.
  • Sous Firefox, un bon outil de debug html/javascript/css : Firebug

Tips

    • Le « Hack CSS » est ce qui permet de contourner les bugs IE. Exemple :
      BODY { COLOR: red !important;
      COLOR: green;
      }
      Alors la page sera rouge QUE sous Firefox (ou autre, en tout cas pas sous IE6 qui ne reconnait pas la commande !important et appliquera donc le vert…). A noter que cette solution est à choisir en dernier recours lorsqu´on a à faire avec une vraie incomptatibilité Firefox / IE.
    • Les Z-INDEX ne marchent que pour les éléments explicitement positionnés (position: absolute) (IE6).
    • Rollover : Au passage de la souris, au lieu de faire deux images distinctes :A { BACKGROUND : url(« mon_image_1.gif »); }
      A:hover { BACKGROUND : url(« mon_image_2.gif »); }
      Il vaut mieux en faire qu´une seule (qui contient les deux images) qu´on fait « coulisser » :
      A { BACKGROUND : url(« mon_image.gif ») 0px 0px; }
      A:hover { BACKGROUND : url(« mon_image.gif »); -50px 0px; }

 

    • La pseudo classe :hover n´est associée qu´au tag A.

 

    • Un nom de classe ne doit pas commencer par un chiffre. Cela plantera sous Firefox.

 

    • Application d´un style avec un attribut particulier : input[type= »text »] {background-color: blue}.

 

    • Attention, pas d´espace entre la quantité et l´unité (« 25px » et non « 25 px »), ça plantera sous Firefox.

 

    • L´épaisseur de border est ajouté au width et height de la boite.

 

    • Font-color n´existe pas ! C´est  « color » qu´il faut utiliser.

 

    • Pour changer une background-color sur un mouseover, le plus simple et de faire une balise A qui n´est liée à aucune URL. Faire un style « A:hover » et le tour est joué.

 

    • Attention à bien utiliser la palette des 256 couleurs WEB pour ne pas avoir de surprises au rendu. Visiter le site Visibone (OBSOLETE)

 

  • Pour « Font-family », il est conseillé d´ajouter en dernier choix une police générique.

Jahia : Réitérer la licence provisoire de démonstration

ATTENTION : Cette manip ne fonctionne qu’avec une licence par défaut fournit lors d’une installation de Jahia.
–    Arrêter le serveur Jahia.
–    Renommer le fichier /<REP_INSTALLATION>/WEB-INF/var/dbdata/system.dat en system_old.dat par exemple.
–    Redémarrer le serveur.
–    Après redémarrage, vérifier qu’un nouveau fichier system.dat a bien été généré dans le répertoire indiqué au-dessus.
–    Pour vérifier que la manip a bien fonctionné, se connecter à l’administration Jahia. En bas de l’écran d’accueil de l’administration, la phrase suivante doit apparaître : Jours d’utilisation restant avant expiration : 59

Pense-bête Oracle 10g

Oracle ! Ô désespoir !
1. Passer du mode ARCHIVELOG à NOARCHIVELOG
# sqlplus / as sysdba

// VERIFIER LE MODE :
SQL> select log_mode from v$database;


// CHANGER LE MODE :
SQL> shutdown immediate;
SQL> startup mount;
SQL> ALTER DATABASE noarchivelog;
SQL> ALTER DATABASE open;

2. Création d’un User / Schema et son Tablespace
Création avec temporary tablespace, sous SQLPlus par ex. :
SQL> create tablespace d_tbl datafile '/oracle/oradata/INSTANCE/datafile/d_tbl.dbf' size 10M autoextend on next 10M;
SQL> create tablespace i_tbl datafile '/oracle/oradata/INSTANCE/datafile/i_tbl.dbf' size 10M autoextend on next 10M;
SQL> create temporary tablespace t_tbl tempfile '/oracle/oradata/INSTANCE/datafile/t_tbl.dbf' size 10M autoextend on next 10M;
SQL> create user DB_USER identified by DB_USER_PWD default tablespace d_tbl temporary tablespace t_tbl;
SQL> grant connect, resource, create synonym, create view, create materialized view to  DB_USER;

// SUPPRESSION COMPLETE :
> drop user DB_USER cascade;
// Modification de mot de passe :
> alter user DB_USER identified by rYFrvfFb;
3.    Commandes SQL pratiques
3.1.    Liste des users :
SQL> select USERNAME, USER_ID,ACCOUNT_STATUS from DBA_USERS order by USER_ID;
3.2.    Vérifier que l’instance Oracle tourne
# sqlplus 'connect / as sysdba';
SQL*Plus: Release 9.2.0.8.0 – Production on Sat Dec 1 19:08:55 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Enter password:
Connected to an idle instance.
SQL> select status from v$instance;
*
ERROR at line 1:
ORA-01034: ORACLE not available
–> L’instance Oracle ne tourne pas. Sinon vérifier la liste des processus :
 # ps -aef |grep pmon
3.3.    ERREUR : "Startup : LRM-00109: could not open parameter file '/oracle/product/10.2/rdbms/dbs/initXXX.ora'"
Il faut ajouter le chemin du spfile à la commande startup :
# startup pfile=$ORACLE_HOME/dbs/spfileDBBAS.ora;

EasyPHP / MySql : Plantage d’apache exit status 3221225477

Boom
Sous Easy-php (les dernières versions > 5), une erreur dans le code PHP peut faire crasher Apache…
Si la trace est la suivante : Parent: child process exited with status 3221225477 -- Restarting., le problème vient d’une mauvaise utilisation du module mysql (qui était plus tolérant dans les versions antérieures).
Ainsi, veiller à ce que les ouvertures et fermetures des connections sql se fassent ainsi :


$connexion = mysql_connect($host,$login,$passwd);
...
mysql_close($connexion);