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.

14 avril 2009

INFOPATH : Contact selector

Aujourd'hui un tip pouvant être très utile :
"Comment utiliser le contact selector de Sharepoint dans un formulaire Infopath."
Le contact selector est l'un des rares contrôle Activex que l'on peut utiliser dans infopath form services...Et il peut s'avérer fort utile puisqu'il permet d'aller rechercher des utilisateurs ou groupes Sharepoint sur un site précis.
Pour cela, il faut suivre avec attention les étapes suivantes :
  • Utilisation d'un fichier de mappage du serveur nommé context
    (Il permet de préciser sur quel serveur Sharepoint le contact selector va se pluguer)

    Il faut tout d'abord ouvrir un éditeur de texte et y coller le texte suivant Context siteUrl=
    http://servername/  (en précisant le nom de votre serveur sharepoint),
    Puis enregistrer ce document xml avec le nom "Context.xml" sur votre bureau.
    Ajouter dans infopath une nouvelle connexion de données de la forme suivante "Réception de données / Document XML / Inclure ce fichier en fichier de ressource du formulaire " tout en allant chercher le fichier context.xml que vous venez d'enregistrer.
  • Recherche de l'activex dans la galerie de contrôles


    Il faut donc cliquer sur "Ajouter ou supprimer des contrôles personnalisés" puis allez sélectionner le "Contact Selector".Il sera donc disponible dans la section contrôle "Personnalisé" comme ci-dessus.
  • Construction de la source de données.
    La source de données répend à une nomenclature bien spécifique.
    Il est obligatoire d'avoir un groupe comprenant un groupe extensible nommé "Person" :


              Le groupe "Person" et ses fils doivent être nommés de la façon ci-dessus pour que le contact selector fonctionne.Ensuite faire un drag and drop du contrôle et le pluguer sur le groupe contenant 'Person' dans la source de données.
NB : Si vous voulez insérer plusieurs contact selector dans un seul formulaire, faire un clic droit sur le groupe extensible "Person" dans la source de données puis cliquer sur "Référence" et le placer à l'endroit voulu.
Ainsi vous pourrez avoir plusieurs fois dans la structure le groupe person.

10 mars 2009

Modèle objet : InfoPath 2003 VS Infopath 2007

Pour les habitués du modèle objet infopath 2003 qui sont passés à Infopath 2007, voici un petit mapping entre les modèles de ces 2 versions (ils n'ont plus grand chose à voir):


Modèle objet InfoPath 2003 :
  • thisXDocument.DOM
  • IXMLDOMNode
  • Lecture: field1.text
  • Affectation: field1.text


Modèle objet InfoPath 2007 :
  • this.MainDataSource
  • XPathNavigator
  • Lecture: field1.Value
  • Affectation: field1.SetValue()


Ce petit mapping des objets les plus utilisés est sans prétention.
Pour les développeurs qui voudraient disposer du poster du modèle objet infopath 2007 (incorporant en plus la compatibilité Form services), voici le lien à suivre:



Avec ça, le modèle objet Infopath n'aura plus aucun secret pour vous...