28 juillet 2009

InfoPath : Le retour de l'attribut nil

Tôt ou tard, en réalisant du code managé sur infopath, vous allez être confronté à l'erreur qui tue "schema validation found non-data type"...

Cette erreur provient dans 99% des cas de l'attribut nil sur les champs de type "DateTime, Time, Date, Boolean, Whole Number et Decimal".
Si vous rendez un de ces champs null, vous aurez l'erreur précédente car le vide est considéré comme une chaine vide et donc le formatage des données n'est pas respecté...

La méthode de contournement est simple, encore faut-il la connaitre!
Il suffit d'utiliser ces 2 procédures codées en C# qui prennent en paramètre un XPathNavigator du noeud concerné.

La procédure "DeleteNil" permet d'enlever l'attribut nil du noeud s'il existe de manière à insérer une valeur dans le champ sans avoir d'erreur.

public void DeleteNil(XPathNavigator node)
{
if (node.MoveToAttribute("nil",
http://www.w3.org/2001/XMLSchema-instance))
node.DeleteSelf();
}


La procédure "InsertNil", quand à elle, permet de supprimer la valeur d'un champ qui n'est pas de type texte.Pour cela il faut supprimer la valeur et remettre l'attribur nil:

public static void InsertNil(XPathNavigator node)
{
if(!node.MoveToAttribute("nil", "
http://www.w3.org/2001/XMLSchema-instance"))
{
string result = string.Empty;
int endIndex = node.OuterXml.IndexOf(">");
result = node.OuterXml.Substring(0, endIndex) + " xsi:nil=\"true\" />";
node.OuterXml = result;
}
}


Et voila, vous voila débarassé du cauchemar du "schema validation found non-data type".
Il suffit à présent d'appeler la bonne prodédure.

InfoPath : Insertion d'une image dans un template

Bonjour,

L'insertion d'une image de fond dans infopath 2007 peut se faire par le menu "Format/Couleur d'arrière plan".

Mais dans les cas suivants, cette méthode n'est pas satisfaisante:
- insertion de la même imafe dans plusieurs vues (les images sont dupliquées et le fichier ".xsn" est alourdi pour rien).
- Postionnement spécifique de l'image de fond dans la page.
- Rajout de plusieurs images dans chaque vue d'un formulaire.

Pour remédier à ces différents cas de figure, il vaut mieux reprendre manuellement ce qu'infopath réalise automatiquement.
Voici la solution à suivre dans le cas d'un formulaire n'étant pas intégré dans une solution managée:

- Aller dans Outils puis insérer l'image en fichier de resources.
- Enregistrer le formulaire sur votre PC.
- Le template ".xsn" d'infopath n'est autre qu'un fichier cab comprenant les fichiers de la solution.
Il faut donc les extraire en faisant "Fichier/Enregistrer en tant que fichiers source".
- Si vous vous déplacez dans ce dossier, vous apercevez l'image que vous avez rajouté précédemment.
- Utiliser un éditeur de texte et éditez la vue "xsl" afin d'y placer l'image en image de fond par exemple.
Se déplacer dans le bloc et rajouter l'attribut suivant : style="background-image:url('Logo.jpg')"
- Ouvrir le fichier manifest.xsf en sélectionnant le mode conception sur le clic droit pour enregistrer de nouveau le formulaire.

Cette méthode est donc à utiliser se vous souhaitez ne pas obtenir de template trop lourds au niveau du poids.

18 juin 2009

Activation de feature sur sous-sites Sharepoint

Un des donctionnalités majeure de Sharepoint est le déploiement de "feature" qui permet de créer de nouveaux composants (workflow, eventhandler, formulaire...).
Le problème est que si le déploiement se fait sans soucis, l'activation n'est pas aussi simple...
Pour les cas usuels, il faut utiliser la commande suivante:
stsadm -o activatefeature -filename "...\feature.xml" -url "myurl" -force

En effet, l'opération stsadm n'active le feature que pour le site précisé et non pour les sous-sites déjà créés sous cette collection de site!!!
Assez frustrant surtout si vous avez une centaine de sous-sites sur lesquels activer la fonctionnalité...
Le petit script suivant vous permet d'activer la fonctionnalité:

## Reference to SharePoint DLL
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
## Probable location of sharepoint STSADM utility program
$stsadm = "$env:programfiles\Common Files\Microsoft Shared\Web Server Extensions\12\BIN\STSADM.EXE"

function global:Activate-feature-onSite($feature, $url)
{$spsite=new-object Microsoft.SharePoint.SPSite($url);
for($i=0; $i -lt $spsite.AllWebs.Count;$i++)
{
$websiteurl= $spsite.AllWebs[$i].url;
$sResult = &stsadm -o activatefeature -name $feature -url $websiteurl -force

if(!($sResult -like "*Operation completed successfully*"))
{ Write-Host -ForegroundColor "red" -BackgroundColor "white" "Activation du feature : '$feature' sur le site '$websiteurl' ! `n $sResult"
}
}
$spsite.Dispose();
}

# to call
Activate-feature-onSite "feature" "url"


Vous avez juste à changer sur la dernière ligne le nom du feature et l'url de la collection de sites.
Il faut mettre ce script dans un fichier texte avec l'extension ".ps1" (powershell).
Puis l'exécuter par la commande :
powershell Set-ExecutionPolicy RemoteSigned
powershell ActiveFeature.ps1
Et le tour est joué...
Attention cependant à l'effet pervers: pour les eventhandlers déployé sur des types de listes particuliers, cela est à utiliser uniquement sur les sous-sites déja crée au moment de l'installation du feature.
Sinon vous risquez de vous retrouver avec 2 eventhandler à la place d'un seul (1 créé lors de l'activation par le scipt et l'autre créé lors de la création du sous-sites du fait de l'application du content-type).
Et du coup plein d'effets de bords!!!

15 juin 2009

Infopath 2010 (Office 14)

Bonjour,
La dernière mouture d’Office va bientôt arriver. Elle se nomme Office 14 (et oui on a sauté la 13 chez microsoft par superstition…). Elle est à présent disponible en Technical Review. L’occasion pour nous de se pencher sur les dernières évolutions apportées à Infopath et notamment les nouveaux contrôles.

Au premier abord, la nouveauté essentielle : Infopath se décompose à présent en 2 logiciels :
- Infopath Designer qui permet de dessiner le formulaire.
- Infopath Editor qui permet de remplir les formulaires.

Donc l’utilisateur Lambda n’aura besoin que du player (Infopath editor) pour travailler.Celui-ci risque donc d’être présent dans la version Office basique…
Ensuite en nouveauté, on peut citer par exemple :
- apparition de la notion de scope sur les champs,
- Design d’infopath reprenant le ribbon d’office 2007,
- Possibilité de dire si l’on veut activer l’autocomplétion sur les champs.

La grande nouveauté reste l’apparition de nouveaux contrôles tous plus utiles les uns que les autres. Voici la liste exhaustive de tous les contrôles disponibles (cliquer sur l'image pour l'agrandir):



Le contrôle Combo box permet notamment de saisir une nouvelle valeur si celle-ci n’est pas dans la liste (contrôle nécessaire depuis un moment).

Tout ce qu'il faut donc pour réaliser de jolis formulaires!!!

Infopath 2010 fera l’objet de nouveaux posts lors de l’apparition de la version Release qui sera le reflet de la version finale.

27 avril 2009

INFOPATH : Envoi Mail

Une question qui revient souvent : Comment envoyer un mail depuis Infopath.
Cet envoi peut être réalisé de plusieurs façons:
  1. Utilisation d'une classe d'envoi de mail personnalisée,
  2. Utilisation d'une connexion de données permettant d'envoyer un mail,
Mais aussi, utilisation de la fameuse classe SPUtility.SendEmail...
Cette classe est accessible en utilisant du code personnalisé (C# ou VB).
Celle-ci permet d'envoyer un mail classique et prend plusieurs paramètres:
  • Le SPWeb,
  • L'encodage HTML,
  • Le mail de destination,
  • L'objet,
  • Le corps du mail.
Cette classe comporte malheureusement 3 inconvénients majeurs:
  • Impossibilité d'insérer de pièces jointes...
  • Impossibilité de préciser l'envoyeur du mail...Ce sera celui configuré dans les outgoing email de Sharepoint qui sera utilisé.
  • Tronque les mails trop long. Mais il y a vraiment de la marge.
Pour des petits mails d'informations, ou de soumission à approbation, cette classe est largement suffisante et fonctionne sans problème.