by Romain.CASTERES
10. June 2012 13:48
Power Pivot est un module qui s’intègre à Excel et se présentant sous forme d’add-in, qui nous permet d’importer des données de différentes sources (Base de données SQL, ficher texte/Excel, base Access…), afin de toutes les regrouper en un seul jeu de données grâce aux relations.
Power View(ex Crescent) est la nouvelle évolution dans les outils de restitution de données Microsoft. Ce nouvel outil qui permet la création de tableaux de bord très riches et dynamiques ainsi que sa collaboration avec PowerPivot.
Cette article a pour but de présenter PowerPivot et PowerView
J’ai dans un premier temps rapatrié et corrélé mes différentes données dans PowerPivot : 
Noté que ma dimension Plat comporte un attribut Image : 
Les images ont été préalablement déposées dans une galerie partagée dans SharePoint.
Noté que le model SSAS Tabular à les même options :
Après avoir créé des hiérarchies et des nouvelles mesures calculées en DAX j’ai définit les différentes propriétés des tables : 
Configurer le comportement des tables : http://msdn.microsoft.com/en-us/library/hh560542%28v=SQL.110%29.aspx
Une fois mon model finalisé, j’ai transférer mon fichier Excel dans une galerie PowerPivot dans SharePoint. PowerPivot possède une galerie de présentation des fichiers dédiée dans SharePoint réalisé en Silverlight.
Une prévisualisation des feuilles de chaque fichier Excel et une prévisualisation des différents rapports réalisés facilitent la gestion de la galerie. 
Création d’un rapport PowerView à partir de notre PowerPivot : 
Les images sont placées en titre ce qui permet d’avoir un filtre en série avec défilement :
Concernant l’actualisation des données dans PowerPivot : comme dans SQL Server Reporting Services il est possible de planifier l’actualisation des données de vos fichiers directement depuis l’administration de SharePoint.
Les étapes pour la mise en place de la planification sont détaillées sur le site MSDN de Microsoft : http://msdn.microsoft.com/fr-fr/library/ee210595.aspx
Essayer PowerView en ligne : ICI !
by Soufiane.BenYOUSSEF
1. December 2011 18:34
if((Get-PSSnapin "Microsoft.SharePoint.PowerShell" ) -eq $null) { Add-PSSnapin "Microsoft.SharePoint.PowerShell"};
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Publishing")
[System.Reflection.Assembly]::LoadWithPartialName("System")
$site = new-object Microsoft.SharePoint.SPSite("http://mysite");
$web = $site.OpenWeb()
$fileDWP = $saveFolder + "myCustom.dwp"
$errorMsg = ""
[Microsoft.SharePoint.SPList]$wpList $site.GetCatalog([Microsoft.SharePoint.SPListTemplateType]::WebPartCatalog)
$fileStream = ([System.IO.FileInfo](Get-Item $fileDWP)).OpenRead()
[Microsoft.SharePoint.SPFolder]$wpFolder = $wpList.RootFolder
[Microsoft.SharePoint.SPFile]$wpFile = $wpFolder.Files.Add("myCustom.webpart", $fileStream, $true)
$wpFile.Update();
[System.Xml.XmlReader]$xmlReader = [System.Xml.XmlReader]::Create($wpFile.OpenBinaryStream())
[Microsoft.SharePoint.Publishing.PublishingWeb]$pubWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web);
[Microsoft.SharePoint.SPFile]$defaultPage = $pubWeb.DefaultPage;
[Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager]$wpManager = $defaultPage.GetLimitedWebPartManager([System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)
$myCustomWP = $wpManager.ImportWebPart($xmlReader,[ref]$errorMsg) $wpManager.AddWebPart($infoWp, "Right", 1);
$fileSream.Close()
$xmlReader.Close()
$pubWeb.Close()
$web.Dispose()
$site.Dispose()
write-host "Done"
by Soufiane.BenYOUSSEF
13. November 2011 00:10
User strategies are uses by service profile for user profil to activate or deactivate some functionnality for users and MySites.
Here is 3 ways to proceed:
Central Admin
C#
using (SPSite site = new SPSite("http://myAdminUrl"))
{
using (SPWeb web = site.OpenWeb())
{
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
UserProfileManager usrProfil = new UserProfileManager(serviceContext);
PrivacyPolicyManager prvPolicyMgr = usrProfil.GetPrivacyPolicy();
PrivacyPolicyItem[] pPolicyItems = prvPolicyMgr.GetAllItems();
foreach (PrivacyPolicyItem policyItem in pPolicyItems)
{
if (policyItem.Group.Equals("appartenances", StringComparison.InvariantCultureIgnoreCase))
{
//Check if the Privacy policy is deactivated
if (policyItem.PrivacyPolicy == PrivacyPolicy.Disabled)
continue;
policyItem.PrivacyPolicy = PrivacyPolicy.Disabled;
policyItem.Commit();
}
}
}
}
PowerShell
if((Get-PSSnapin "Microsoft.SharePoint.PowerShell") -eq $null)
{
Add-PSSnapin Microsoft.SharePoint.PowerShell
}
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.UserProfiles")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[System.Reflection.Assembly]::LoadWithPartialName("System")
$site = new-object Microsoft.SharePoint.SPSite("http://mySite")
$ServiceContext = [Microsoft.SharePoint.SPServiceContext]::GetContext($site)
$web = $site.OpenWeb()
$upm = [Microsoft.Office.Server.UserProfiles.UserProfileManager](Microsoft.Office.Server.ServerContext]::Default)
$prvPolicyMgr = $upm.GetPrivacyPolicy()
$pPolicyItems = @($prvPolicyMgr.GetAllItems())
foreach($policyItem in $pPolicyItems)
{
if($policyItem.Group.Equals("appartenances",[System.StringComparison]::InvariantCultureIgnoreCase -and $policyItem.Privacy -neq [Microsoft.Office.Server.UserProfiles.PrivacyPolicy]::Disabled)
{
$policyItem.PrivacyPolicy = [Microsoft.Office.Server.UserProfiles.PrivacyPolicy]::Disabled
$policyItem.PrivacyPolicy.Commit()
}
}
$web.Dispose()
$site.Dispose()
For this script, you'll need to run powershell with sufficient privileges =>Run powershell with elevated privileges
by Soufiane.BenYOUSSEF
23. December 2010 18:19
When you want to browse programmatically a web site when you are in anonymous mode, you'll not able to make a 'foreach' on AllWebs property from SPSite object.
AllWebs property need you to be logged.So when you're in anonymous you'll have a popup to login that's not really cool.
So to browse,you'll have to use
SPWeb.GetSubWebsForCurrentUser();
by Soufiane.BenYOUSSEF
22. December 2010 23:55
L'envoi d'un mail par code peut-être une chose fastidieuse quand vous construisez le code html de votre mail dans une de vos fonctions. Le problème de cette méthode c'est que votre code devient vite illisible et si vous(ou un collaborateur utilisant WSS/MOSS) voulez changez le format du mail, vous serez obligez de repasser dans votre code.
Donc pour éviter de vous perdre rapidement dans votre fonction qui écrit votre mail et évitez de repasser dans votre code, utilisez plutôt un template de mail au format html que vous uploaderez dans une doclib (au top level site par exemple).

Du coté code, vous n'avez qu'a ouvrir votre template de mail de la manière suivante:
SPFolder emailTemplatesFolder = rootWeb.GetFolder(rootWeb.Url + "/" + "EmailTemplates");
SPFileCollection fileCollection = emailTemplatesFolder.Files;
SPFile senderMailBodySPFile = fileCollection["monTemplateDeMail.html"]
byte[] senderMailBodyBinary = senderMailBodySPFile.OpenBinary();
string senderMailBody = Encoding.UTF8.GetString(senderMailBodyBinary);
Un petit truc bien sympa aussi, vous pouvez mettre des variables dans votre mail que vous remplacerez dans votre méthode.Pour ma part, j'ai rajoutez des variables dans mon mail qui sont de la forme @@nomVariable@@
Et pour finir, il vous suffit de remplacer vos variables de la manière suivante:
string userName = "dcubesolutions";
senderMailBody = senderMailBody.Replace("@@userName@@", userName );
by Soufiane.BenYOUSSEF
20. December 2010 23:59
Si un jour vous avez besoin d'envoyer un mail via votre code, plutôt que de mettre l'addresse SMTP pour l'envoi de mail en dur dans votre code, utilisez plutôt le code suivant:
string smtpServerAddress = SPContext.Current.Site.WebApplication.OutboundMailServiceInstance.Server.Address;
SmtpClient smtpClient = new SmtpClient(smtpServerAddress);
Ces lignes de code vous permettront de récupérer l'addresse SMTP (configurée dans votre Web Application ou dans la ferme) pour l'envoi de mail et d'instancier un objet smtp que vous utiliserez pour l'envoi de vos mails.
by Soufiane.BenYOUSSEF
12. December 2010 00:00
Lors du déploiement d'un package wsp, il se peut que celui rester bloqué sur le statut "deploying" indéfiniment et vous ne pourrez donc par la suite, ni faire d'upgrade de solution ni aucune autre opération concernant ce package. Pour débloquer le job qui pose problème et pouvoir à nouveau faire des opérations sur le package voici la manipulation à suivre: Lancer la commande stsadm suivante: stsadm -o enumdeployments Le résultat s'affiche alors sous forme de XML. Il vous suffit alors de repérer le nom du package en question dans l'élément et de récuperer l'ID du job qui se trouve dans l'élement.

Une fois l'ID récupérer exécuter la commande stsadm suivante: stsadm -o canceldeployment -id votreJobID. Le tour est joué, maintenant vous pourrez à nouveau effectuer des opérations sur votre package
by Soufiane.BenYOUSSEF
10. December 2010 00:01
Les commandes STSADM peuvent s'avérer très utiles mais vous ne trouverez pas forcément la commande utile pour accomplir ce que vous voulez.
Récemment chez un client nous avons eu un petit soucis de modification de navigation.Chaque fois que nous tentions d'utiliser la page de modification de navigation de sharepoint,nous avions une jolie exception générée par Sharepoint.
Un utilisateur avait supprimé une page qui était encore référencée dans la navigation et du coup générait une NullReferenceException.
Ici nous allons vérifier que tout les noeuds de la navigation renvoie vers une page existant dans la doclib "Pages" en créeant une nouvelle commande STSADM.
Cela aurait pu être fait autrement mais nous allons ici aborder l'extension de commandes STSADM.
Notre commande prendrant en paramètre l'url de la site collection dont nous souhaitons vérifier la navigation.
Créer un nouveau projet visual studio de type "Bibliothèque de classe"
Ajouter ensuite le
using Microsoft.SharePoint;
et
using Microsoft.SharePoint.StsAdmin;
Votre classe doit hériter et implémenter l'interface ISPStsadmCommand.
public interface ISPStsadmCommand
{
string GetHelpMessage(string command);
int Run(string command, StringDictionary keyValues, out string output);
}
public string GetHelpMessage(string command)
{
return "\tCheck navigations node and pages\n" + "\t Using: stsadm -o checkNaviation -siteUrl <a href="http://monsite//n/n">http://monsite//n/n</a>";
}
public int Run(string command, StringDictionary keyValues, out string output)
{
if (!keyValues.ContainsKey("siteUrl"))
{
output = "Vous devez preciser l'url de la site collection\n";
return 0;
}
_siteUrl = keyValues["siteUrl"];
using (SPSite site = new SPSite(_siteUrl))
{
using (SPWeb web = site.OpenWeb())
{
if (!PublishingWeb.IsPublishingWeb(web))
{
Console.WriteLine("Ce site n'est pas un site de type PUBLISHING\nFin du traitement");
return 0;
}
PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web);
foreach (SPNavigationNode navigationNode in pubWeb.CurrentNavigationNodes)
{
if (navigationNode.Children.Count > 0)
{
foreach (SPNavigationNode childrenNavNode in navigationNode.Children)
if (!childrenNavNode.Url.Contains("?")) _urlToTest.Add(childrenNavNode.Url);
}
}
TestPages(web);
}
}
return 1;
private static void TestPages(SPWeb p_web)
{
List<string> pageList = new List<string>();
SPList pagesList = p_web.Lists["Pages"];
foreach (SPListItem pageItem in pagesList.Items)
pageList.Add(pageItem.Name);
foreach (string pageUrl in _urlToTest)
{
Console.WriteLine("Page testée\t =>{0}", pageUrl);
if (!pageList.Contains(pageUrl))
Console.WriteLine("\t\t => EXISTE PAS\n\n");
else
Console.WriteLine("\t\t => EXISTE\n\n");
}
}
Ajout de notre commande à celles de stsadm. Créez-vous un fichier xml que vous appelerez par exemple stsadmcommands.mesExtensions.xml et ques vous allez ensuite copiez dans le répertoire /12/Config/ de votre installation Sharepoint. Voici la structure du fichier xml .