Salut,
J'ai récemment travaillé sur la base de données WSS_Logging qui est la seule base de données SharePoint ouverte en lecture/écriture de manière supportée par Microsoft.
J'ai particulièrement regardé la vue [WSS_Logging].[dbo].[RequestUsage] car elle contient pas mal d'informations relatives à la fréquentation des sites et des éléments de listes, documents, pages etc...L'une des informations disponibles dans la vue est la colonne Title qui contient le titre de l'item de liste (doc/page/item) visité. Ceci est très intéressant car le titre est vraiment une donnée significative ayant une valeur métier importante dans la mesure où celle-ci est saisie par des gens du métier; elle aura donc d'autant plus de poids dans les rapports.
Cependant, j'ai observé un comportement inattendu avec une liste dont le formulaire d'affichage, le displayform avait été entièrement modifié, à tel point, qu'aucun contrôle SharePoint habituel n'y était déclaré.
A cause de cela, pour chaque ligne dans la vue RequestUsage, ce n'est non pas le titre de l'élément qui se retrouvait dans la vue mais le titre de la liste, ce qui forcément était beaucoup moins intéressant.
Après avoir comparé une dispform standard avec la dispform modifiée, j'ai constaté qu'il fallait au moins ajouter le code suivant dans le content placeholder PlaceHolderPageTitleInTitleArea :
<SharePoint:ListProperty Property="LinkTitle" runat="server"/>: <SharePoint:ListItemProperty runat="server"/>
Avec ce simple contrôle, c'est à nouveau bel et bien la valeur du titre de l'item visité qui est loggé en DB et non plus la valeur de la liste. Je me suis donc dit que ça pourrait éventuellement vous intéresser car c'est une chose à savoir en amont d'un projet de préférence.
Happy Coding!
Vous devez être identifié pour poster un commentaire.
Salut,
Voici mon top 10 des tests que j'effectue lorsque je teste des webparts, qu'ils soient développés par moi-même ou par d'autres consultants.
1. Se logger en tant que simple visiteur
Bien souvent, les développeurs sont connectés en tant qu'administrateur local et en tant qu'administrateur de ferme sur leur machine de développement, c'est à dire, avec toutes les permissions requises quoi qu'ils fassent. Le danger, c'est que cette situation ne reflète pas le contexte réel dans lequel le webpart sera déployé.
En effet, il est important se s'authentifier uniquement avec des permissions de visiteur afin de s'assurer qu'aucune erreur liée à la sécurité ne se produise. Les types d'opération qui peuvent mener à des problèmes sont par exemple:
- Le webpart essaye d'écrire des données dans une liste d'application, dans un property bag...alors qu'évidemment, le simple visiteur n'a aucun droit d'écriture
- le webpart consomme une partie de son information dans une liste applicative utilisant des permissions uniques auxquelles les simples visiteurs n'ont pas accès.
- ....
Bien que cela semble évident, il est nécessaire d'y penser à chaque fois, ceci est d'ailleurs valables pour tous les composants SharePoint, pas seulement les webparts mais ceux-ci étant les plus "utilisés" par les visiteurs, c'est davantage nécessaire.
2. Ajouter le webpart plusieurs fois sur la même page
Ceci peut sembler anodin mais bien qu'il soit évident qu'un webpart peut par nature être ajouté plusieurs fois sur une page, tout le monde n'y pense pas et les effets indésirables sont souvent surprenants lorsqu'on n'a pas pris les précautions nécessaires.
Les 3/4 du temps, les erreurs que l'on va rencontrer seront liées au code HTML/Javascript custom généré par notre wepbart. En effet, si on ne prend garde à donner des ID/noms uniques à nos éléments DOM et à nos variables javascript, le fait d'ajouter le webpart plusieurs fois sur la page va créer plusieurs fois des éléments HTML et javascript avec les mêmes noms, ce qui provoquera une certaine confusion au niveau du navigateur.
Un exemple concret est le suivant:
Disons que vous souhaitez développer un webpart qui expose une propriété permettant de le lier à une liste SharePoint. Pour faire simple, lorsque la liste est choisie, le webpart affiche le nombre d'éléments qu'elle contient. Vous créez un Visual WebPart et dans le contrôle utilisateur (.ascx), vous implémentez le code suivant:
<script type="text/javascript">
ExecuteOrDelayUntilScriptLoaded(GetItems, "sp.js");
function GetItems() {
this.ClientContext = SP.ClientContext.get_current();
if (this.ClientContext != undefined && this.ClientContext != null) {
this.ReturnedList = this.ClientContext.get_web().get_lists().getByTitle('<%= ListName %>');
this.ClientContext.load(this.ReturnedList);
this.ClientContext.executeQueryAsync(
Function.createDelegate(this, this.Success),
Function.createDelegate(this, this.Failure));
}
}
function Success(sender, args) {
document.getElementById("NonUniqueIDDivElement").innerText = this.ReturnedList.get_itemCount();
}
function Failure(sender, args) {
document.getElementById("NonUniqueIDDivElement").innerText = "nok";
}
</script>
<div id="NonUniqueIDDivElement"></div>
Vous spécifiez le nom de la liste au niveau de la propriété:

Quand vous ajoutez le webpart une seule fois dans la page, vous obtenez le résultat attendu:

Si par exemple, vous l'ajoutez une seconde fois dans la page et vous le liez à la bibliothèque "docs" qui contient seulement 1 élément, vous obtenez ceci:

Le deuxième webpart affiche son résultat "1" dans la zone du premier...La raison est évidente, l'élément
que nous avons généré a le même ID pour les deux webparts, du coup, le navigateur affecte la valeur à la première instance qu'il trouve ayant cet ID...Si vous n'aviez ajouté le webpart qu'une seule fois dans la page, vous n'auriez jamais constaté le problème.
Ceci est valable pour le javascript ou il faut s'assurer que le contexte js soit bien indépendant d'une instance de webpart à une autre. Ceci dit, il faut également voir si le scénario métier impose cette vigileance. Si pour des raisons évidentes, vous savez que le webpart que vous développez ne sera jamais ajouté plus d'une fois, il n'est peut-être pas indispensable de prendre toutes ces précautions mais il faut au moins connaître les risques.
3. Vérifier que le fichier webpart .webpart ou .dwp soit bien supprimé de la galerie
Les développeurs SharePoint expérimentés connaissent bien ce problème...Lorsque vous créez une feature, déployez le fichier .webpart dans la galerie via un "Module", à l'activation de la feature, le fichier est bien déployé mais à la désactivation, celui-ci n'est pas supprimé de la galerie.
L'impact est donc que même après désactivation, les utilisateurs voient toujours ce webpart comme disponible et peuvent toujours l'ajouter dans les pages. Pour éviter cette incohérence, vous pouvez utiliser un feature receiver qui supprime le fichier .webpart de la galerie lors de la désactivation de la feature.
4. Vérifier l'association entre la feature et le webpart
Comme vous le savez, on utilise généralement une feature scopée à "Site" pour déployer un webpart. Comme vous le savez aussi, pour tout webpart, il est nécessaire qu'une entrée de type "SafeControl" soit ajoutée dans le web.config de l'application SharePoint sur laquelle on déploie le webpart.
Ceci signifie donc, qu'en terme de sécurité SharePoint, le webpart sera utilisable pour toutes les collections de sites associée à cette application SharePoint. Ceci n'est pas toujours souhaitable. Comme évoqué au point précédent, la feature nous sert à déployer le fichier .webpart dans la galerie, donc si la feature n'est pas activée, par défaut, les utilisateurs ne verront pas le webpart lorsqu'ils essayeront de l'ajouter dans la page. Cependant, un simple propriétaire de site au niveau du rootweb peut lui-même aller ajouter manuellement le webpart dans la galerie alors qu'il ne peut pas activer la feature au niveau de la site collection.
Du coup, votre webpart peut-être utilisé dans un contexte métier qui n'a pas forcément été prévu...et alors même que vous n'avez pas activé la fonctionnalité.
C'est pourquoi, pour les webparts "sensibles" d'un point de vue métier, il est préférable de s'assurer que le webpart ne soit utilisable que si la fonctionnalité a explicitement été activée par un administrateur, ceci peut se faire très facilement:
if(SPContext.Current.Site.Features[new Guid(“..”)] == null)
Error.Text = “This webpart cannot be used, ask your administrator…”;
5. Valider les propriétés
Si le webpart expose des propriétés, il est important de valider le type/la nature de celles-ci, par exemple qu'un lien soit bien un lien...
6. Vérifier la CAS/Trust Level
Si le webpart est déployé dans le bin de la webapp SharePoint, il est toujours bon de modifier (sur une machine de dev) le trust level et de le mettre à WSS_Minimal et vérifier si le webpart fonctionne toujours car cela devrait être le cas. Si il a besoin de plus que WSS_Minimal, il doit implémenter sa propre politique CAS.
7. Vérifier sa réutilisation dans une SandBoxed
Depuis SharePoint 2010 et les SandBoxed solutions, pas mal de webparts pourraient se contenter d'être déployés au sein d'une SandBoxed mais par défaut, les développeurs choisissent souvent d'ignorer cette possibilité et déploient le webpart dans une solution de ferme.
Il est intéressant d'analyser la faisabilité avec une SandBoxed dans l'optique d'une migration future des composants vers le cloud et notamment Office 365 qui ne permet à l'heure actuelle, que de déployer des SandBoxed.
8. Surveiller le temps d'exécution du webpart avec le Developer Dashboard
Comme les webparts sont encapsulés au sein de la page, ils peuvent impacter de manière visible le temps ce chargement de celle-ci et par la même avoir une influence négative sur l'expérience utilisateur. Afin de rapidement identifier des problèmes de consommation de ressources, il est toujours intéressant d'activer le Developer Dashboard.
9. Vérifier le comportement du webpart en mode édition
Il est parfois surprenant de constater le comportement de certains webparts en mode édition...Un bon exemple concerne les validateurs ASP.NET. Si vous utilisez un validateur de type "RequiredFieldValidator", lorsque vous basculerez en édition de page et que vous éditerez d'autres webparts, votre webpart va générer des erreurs car vous n'aurez pas rempli les champs obligatoires...Ceci est dû au fait que lorsque vous éditez d'autres webpart, cela génère des postbacks et c'est à cause de cela que votre validateur s'enclenche et râle comme illustré ci-dessous:

Pour éviter cela, vous pouvez par exemple ajouter un contrôle supplémentaire:
protected override void CreateChildControls()
{
if (this.WebPartManager.DisplayMode == WebPartManager.BrowseDisplayMode)
{
Control control = Page.LoadControl(_ascxPath);
Controls.Add(control);
}
}
Dans ce cas-ci, le webpart n'affichera rien du tout en mode édition, j'ai pris un raccourci
. Vous pouvez tenter d'être plus granulaire et n'agir que sur les valideurs.
10. Tester les opérations habituelles
Généralement cela ne pose pas de problème mais il est toujours préférable de tester la suppression et la fermeture du webpart suivie d'une restauration...
Happy Coding!
Vous devez être identifié pour poster un commentaire.
Salut,
Si, après avoir mis en place une synchronization des profils utilisateurs via une couche BCS développée ou crée avec SharePoint Designer, vous rencontrez le problème suivant:
stopped-extension-dll
Ce problème est peut-être dû au format des données provenant de la source à l'autre bout de votre couche BCS.
Pour plus d'infos, vous pouvez consulter mon blog UK:
http://www.silver-it.com/node/91
Happy Coding!
Vous devez être identifié pour poster un commentaire.
Salut,
J'ai développé une DropBox pour SharePoint Server. L'idée est de permettre aux utilisateurs de l'intranet d'associer quelques documents à leur profil sans pour autant autoriser les My Sites.
Comme vous le savez, ceux-ci doivent être entourés d'une gouvernance pour éviter une prolifération mal contrôlée de My Sites hétérogènes et disparates dans l'entreprise.
La DropBox est une alternative très légère ne nécessitant pas spécialement de gouvernance.
Plus d'infos ici (vidéo inclue) : http://www.silver-it.com/node/90
Happy Coding!
Vous devez être identifié pour poster un commentaire.
Salut,
J'ai enregistré quelques vidéos démontrant l'utilisation de mon système de rating pour SharePoint Foundation.
Plus d'infos ici :
http://www.silver-it.com/node/79
Happy Coding
Vous devez être identifié pour poster un commentaire.
Salut,
Je viens de développer un petit outil permettant de gérer le ruban associé aux listes et bibliothèques SharePoint. L'outil permet d'activer/désactiver certains boutons du ruban voire de masquer entièrement celui-ci.
Pour plus d'infos, j'ai enregistré une vidéo très courte disponible sur mon site:
http://www.silver-it.com/node/75
Happy Coding!
Vous devez être identifié pour poster un commentaire.
Salut,
N'hésitez pas à consulter mes derniers tutos sur SharePoint 2010:
Tout ce qu'il faut savoir sur les Sandboxed Solutions - 8/12/2010
Utiliser l'ECMAScript dans les connexions entre webparts - 24/11/2010
Gérer l'entête d'un type de colonne personnel en XSL - 24/10/2010
Type de colonne personnel, gérer le rendu en XSL - 22/10/2010
Happy coding!
Vous devez être identifié pour poster un commentaire.
Salut,
Si comme moi vous obtenez l'erreur suivante:
Unable to cast object of type Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider to ...
Ne perdez plus votre temps à vous demander ce qui se passe. Quand vous êtes en mode FBA, lorsque l'authentification est terminée, SharePoint génère un token SPCLaim et c'est pour cela que le code suivant (souvent utilisé en 2007):

génère l'erreur de casting.
Vous pourriez évidemment éviter cela en codant comme ceci:

mais vous récupèreriez un NULL, ce qui ne vous avancerait pas davantage.
La solution consiste simplement à bien cibler votre provider comme ceci:

et ça fonctionne beaucoup mieux
.
Happy coding!
Vous devez être identifié pour poster un commentaire.
Salut,
Quand vous adressez ListData.svc directement en AJAX via jQuery, si votre application SharePoint est configurée en Authentification Windows Intégrée avec NTLM ou Kerberos, votre navigateur va généralement transmettre vos credentials automatiquement (Internet Explorer), ou va vous demander de les fournir (Firefox) pour pouvoir vous laisser utiliser le service.
Ce comportement n'est pas similaire lorsque l'on exécute des requêtes AJAX en mode FBA, c'est à dire quand votre application SharePoint est configurée en authentification CBA (Claims Based Authentifcation) et FBA (Forms Based Authentication).
Dans ce cas, le code suivant:

brancherait la gestion d'erreur si vous n'êtes pas encore authentifié. Pour gérer cela, vous pouvez rediriger l'utilisateur consommant votre page vers la page de login SharePoint de manière à obtenir ceci:


Ce code permet de gérer cela:

Le code de retour renvoyé par Firevox est 302 et 12150 avec IE 8 (allez savoir pourquoi...). Si l'un de ces deux codes est retourné, vous pouvez simplement rediriger l'utilisateur vers une URL construite dynamiquement. SharePoint fera le reste et redirigera l'utilisateur vers la page courant après authentification.
Vous devez être identifié pour poster un commentaire.
Salut,
Je ne sais pas si vous avez déjà rencontré ce problème mais lrsque vous ajoutez un webpart listview XSL sur une page, si vous avez des boutons personnels dans le ruban qui sont censés s'afficher pour votre liste, ceux-ci ne s'affichent pas en mode listview alors qu'ils s'affichent correctement lorsque vous utilisez la liste standard créée par SharePoint.
Pour prendre un exemple concret, dans mon système de rating, j'ai créé une CustomAction comme ceci:
<CustomAction Id="Ribbon.List.SilverITRating"
Location="CommandUI.Ribbon"
RegistrationId="101"
RegistrationType="List"
Rights="ManageLists">
...
Elle affiche ce bouton dans le ruban pour toutes les bibliothèques de documents:

et cela fonctionne bien si je clique sur la liste depuis le menu rapide. Cependant, si j'ajoute cette liste en tant que webpart sur une page, mon bouton disparaît.
Ceci est apparemment lié à la barre d'outils que vous devez spécifier au niveau du webpart via les propriéts. La valeur par défaut est "Summary Toolbar" mais si vous choississez "Full Toolbar" ou "Show Toolbar":

le bouton réapparaît dans le ruban...
Je ne sais pas s'il s'agit d'un bug ou si c'est "by design" mais j'ai constaté que modifier la toolbar permettait que cela fonctionne.
Happy Coding!
Vous devez être identifié pour poster un commentaire.
Salut,
Ce petit billet pour vous tenir informé de la parution imminente de notre livre sur SharePoint 2010 en Français. Celui-ci est une mise à jour du premier opus.
Il est, je pense, plus accessible que le premier et allie les aspects liés au développement mais également tout ce qui touche à la personnalisation avancée sans pour autant disposer de connaissances en développement.
Plus d'infos ici:
A bientôt
Vous devez être identifié pour poster un commentaire.
Salut,
Mon Système de rating pour SharePoint Foundation supporte à présent le mode anonyme.
http://sptoolbasket2010.codeplex.com/
Happy Coding
Vous devez être identifié pour poster un commentaire.
| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
Copyright © 2000-2012 - www.developpez.com