Du SharePoint, du silverlight, pas mal de C#, un peu de powershell et surtout du Microsoft
Affichage des articles dont le libellé est Sharepoint 2013. Afficher tous les articles
Affichage des articles dont le libellé est Sharepoint 2013. Afficher tous les articles
mardi 29 mars 2016
Use SharePoint icons in design/development
In my previous post we saw how to change default image used by sharepoint into standard masterpage or ribbon for example (http://larry-microsoft-techno.blogspot.fr/2016/03/change-icons-used-for-sharepoint-2016.html)
In order to map icons to your design I just found this post by Eric :
http://ericoverfield.com/sharepoint-2013-spcommon-png-sprite-breakdown/
Thanks to him you can easily find which css code to use in order to include sharepoint icons into your masterpage or webparts.
vendredi 25 mars 2016
Change icons used for SharePoint 2016 and SharePoint 2016 (spcommon.png and fgimg.jpg)
Designer can easily change icons used for site by modifying the following sprite, one example if you want to have the ribbon in a dark colour the icons "share" "follow" are nearly invisible because they are gray.
Once you've changed the image you can use the following css to override the image where they are used :
img[src*="fgimg.png"]{
background-image:url("/_layouts/15/[YOUR-PROJECT]/fgimg-project.png");
width:0;
height:0;
padding:346.5px 90px;
}
background-image:url("/_layouts/15/[YOUR-PROJECT]/fgimg-project.png");
width:0;
height:0;
padding:346.5px 90px;
}
img[src*="spcommon.png"]{
background-image:url("/_layouts/15/[YOUR-PROJECT]/spcommon-project.png");
width:0;
height:0;
padding:134px 135.5px;
}
mardi 30 juin 2015
Suppression de documents en masse dans SharePoint à l'aide de SPWeb.ProcessBatchData
Aujourd'hui je dois supprimer plus de 100.000 documents dans plusieurs collection de sites et le tout en un temps de traitement le plus court qui soit, VDM.
Cela aurait pu se terminer comme ça !
Plus sérieusement, SharePoint offre plusieurs moyen pour supprimer des éléments au sein d'une liste / Bibliothèque. En revanche toutes les méthodes ne sont pas aussi performantes, en particulier la fonction SPList.Items.DeleteById si cette fonction reste facile à utiliser et à mettre en place lors de la suppression d'un ou plusieurs éléments.
Mais lorsqu'il s'agit de supprimer plusieurs milliers d'élément cela va lentement très très lentement (environ 3-4 secondes par fichier sur un environnement de développement) Alors effectuer ce traitement sur un volume plus important va vite devenir problématique.
Heureusement une autre fonction existe et permet d'effectuer des traitements par lot. La méthode SPWeb.ProcessBatchData prend en paramètre une chaîne CAML (Collaborative Application Markup Language) qui contient les commandes, qui se compose d'un élément de Batch et un nombre quelconque d'éléments subordonnés Method qui spécifient chacun une méthode d'appel (RPC) de procédure à distance SharePoint .
La forme la plus simple est la suivante:
<batch>
<method>
<setlist scope="Request">ID_LIST</setlist>
<setvar name="ID">ID_ELEMENT</setvar>
<setvar md="" name="`">COMMANDE</setvar>
</method>
</batch>
Dans le cadre d'une suppression en masse la fonction suivante qui prend en paramètre l'url du site et le nom de la bibliothèque permet de supprimer les éléments par lot de 2000.
Une requête CAML permet de faire un filtre sur les documents à supprimer.
Function purgeSite($params){
$web = get-spweb $params[0]
$list = $web.lists[$params[1]]
try
{
$i=0
$spQuery = New-Object Microsoft.SharePoint.SPQuery
$spQuery.ViewFieldsOnly = $true
$spQuery.Query = "<where><lt><fieldref name="Created"><value type="DateTime"><today offsetdays="2"></today></value></fieldref></lt></where>"
$spQuery.RowLimit = 2000;
$itemCount = 0;
$listId = $list.ID;
do
{
[System.Text.StringBuilder]$batchXml = New-Object "System.Text.StringBuilder";
$batchXml.Append("<batch>");
$command = [System.String]::Format( "<method><setlist scope="Request">{0}</setlist><setvar name="`">{1}</setvar><setvar name="owsfileref">{2}</setvar><setvar md="" name="`">Delete</setvar></method>", $listId, "{0}","{1}" );
$listItems = $list.GetItems($spQuery)
$spQuery.ListItemCollectionPosition = $listItems.ListItemCollectionPosition
$count = $listItems.Count
Write-Host $count
foreach ($item in $listItems)
{
Write-Host -ForegroundColor Green "Delete item "$item.ID
$list.Items.DeleteItemById($item.ID)
if($item -ne $null)
{
$batchXml.Append([System.String]::Format($command, $item.ID.ToString(),$item["FileRef"])) | Out-Null;
}
#break;
}
$batchXml.Append("</batch>");
# $web.ProcessBatchData($batchXml.ToString())
$result = $web.ProcessBatchData($batchXml.ToString())
$web.RecycleBin.DeleteAll()
}
while ($spQuery.ListItemCollectionPosition -ne $null)
}
catch
{
Write-Host -ForegroundColor Red $_.Exception.ToString()
}
}
Cela aurait pu se terminer comme ça !
Plus sérieusement, SharePoint offre plusieurs moyen pour supprimer des éléments au sein d'une liste / Bibliothèque. En revanche toutes les méthodes ne sont pas aussi performantes, en particulier la fonction SPList.Items.DeleteById si cette fonction reste facile à utiliser et à mettre en place lors de la suppression d'un ou plusieurs éléments.
Mais lorsqu'il s'agit de supprimer plusieurs milliers d'élément cela va lentement très très lentement (environ 3-4 secondes par fichier sur un environnement de développement) Alors effectuer ce traitement sur un volume plus important va vite devenir problématique.
Heureusement une autre fonction existe et permet d'effectuer des traitements par lot. La méthode SPWeb.ProcessBatchData prend en paramètre une chaîne CAML (Collaborative Application Markup Language) qui contient les commandes, qui se compose d'un élément de Batch et un nombre quelconque d'éléments subordonnés Method qui spécifient chacun une méthode d'appel (RPC) de procédure à distance SharePoint .
La forme la plus simple est la suivante:
<batch>
<method>
<setlist scope="Request">ID_LIST</setlist>
<setvar name="ID">ID_ELEMENT</setvar>
<setvar md="" name="`">COMMANDE</setvar>
</method>
</batch>
Une requête CAML permet de faire un filtre sur les documents à supprimer.
Function purgeSite($params){
$web = get-spweb $params[0]
$list = $web.lists[$params[1]]
try
{
$i=0
$spQuery = New-Object Microsoft.SharePoint.SPQuery
$spQuery.ViewFieldsOnly = $true
$spQuery.Query = "<where><lt><fieldref name="Created"><value type="DateTime"><today offsetdays="2"></today></value></fieldref></lt></where>"
$spQuery.RowLimit = 2000;
$itemCount = 0;
$listId = $list.ID;
do
{
[System.Text.StringBuilder]$batchXml = New-Object "System.Text.StringBuilder";
$batchXml.Append("<batch>");
$command = [System.String]::Format( "<method><setlist scope="Request">{0}</setlist><setvar name="`">{1}</setvar><setvar name="owsfileref">{2}</setvar><setvar md="" name="`">Delete</setvar></method>", $listId, "{0}","{1}" );
$listItems = $list.GetItems($spQuery)
$spQuery.ListItemCollectionPosition = $listItems.ListItemCollectionPosition
$count = $listItems.Count
Write-Host $count
foreach ($item in $listItems)
{
Write-Host -ForegroundColor Green "Delete item "$item.ID
$list.Items.DeleteItemById($item.ID)
if($item -ne $null)
{
$batchXml.Append([System.String]::Format($command, $item.ID.ToString(),$item["FileRef"])) | Out-Null;
}
#break;
}
$batchXml.Append("</batch>");
# $web.ProcessBatchData($batchXml.ToString())
$result = $web.ProcessBatchData($batchXml.ToString())
$web.RecycleBin.DeleteAll()
}
while ($spQuery.ListItemCollectionPosition -ne $null)
}
catch
{
Write-Host -ForegroundColor Red $_.Exception.ToString()
}
}
lundi 6 octobre 2014
Powershell : Reporting Service, modification de l'email d'abonnement
L'exemple de script PowerShell suivant met à jour la configuration de l'extension de remise du courrier électronique par le serveur de rapports pour l'application de service nommée My RS Service App. Mettez à jour les valeurs du serveur SMTP
#Modification de l'email Service reporting
$app=get-sprsserviceapplication -Name $rsService
$emailCfg = Get-SPRSExtension -identity $app -ExtensionType "Delivery" -name "Report Server Email" | select -ExpandProperty ConfigurationXml
$emailXml = [xml]$emailCfg
$emailXml.SelectSingleNode("//SMTPServer").InnerText = $smptServer
$emailXml.SelectSingleNode("//SendUsing").InnerText = "2"
$emailXml.SelectSingleNode("//SMTPAuthenticate").InnerText = "2"
$emailXml.SelectSingleNode("//From").InnerText = $fromAddr
Set-SPRSExtension -identity $app -ExtensionType "Delivery" -name "Report Server Email" -ExtensionConfiguration $emailXml.OuterXml
Powershell : Modification du SMTP SharePoint 2013
# Adresse du serveur SMTP
$smptServer = 'smtp.server.com'
# Adresse mail d envoi
$fromAddr = 'noreply@mydomaine.com'
# Adresse mail de réponse
$replyAddr = 'noreply@mydomaine.com'
#Ne rien modifier à partir de cette ligne
#serveurs smtp
Add-PSSnapin Microsoft.SharePoint.PowerShell
$SMTPSvr = $smptServer
$FromAddr = $fromAddr
$ReplyAddr = $replyAddr
$Charset = 65001
$smptServer = 'smtp.server.com'
# Adresse mail d envoi
$fromAddr = 'noreply@mydomaine.com'
# Adresse mail de réponse
$replyAddr = 'noreply@mydomaine.com'
#Ne rien modifier à partir de cette ligne
#serveurs smtp
Add-PSSnapin Microsoft.SharePoint.PowerShell
$SMTPSvr = $smptServer
$FromAddr = $fromAddr
$ReplyAddr = $replyAddr
$Charset = 65001
vendredi 27 juin 2014
SharePoint 2013 + AjaxControlToolkit 4.5 intégration dans votre solution Visual Studio
De quoi parle-t-on ?
ASP.NET AJAX Control Toolkit est un projet open-source intégré au framework Microsoft ASP.NET AJAX. Il s'agit d'un effort conjoint entre Microsoft et la communauté ASP.NET AJAX qui fournit une infrastructure puissante pour écrire des composants réutilisables, personnalisables et extensibles ASP.NET AJAX et des contrôles, ainsi que d'un riche éventail de contrôles qui peuvent être utilisé out-of-the-box pour créer une expérience Web interactive.L'AJAX Control Toolkit contient plus de 30 contrôles qui vous permettent de créer facilement des pages Web interactives riches.
La liste complète des contrôles disponibles se trouve sur cette page: http://www.asp.net/AjaxLibrary/AjaxControlToolkitSampleSite/Default.aspx
Intégration à une solution SharePoint 2013 sur Visual Studio 2012
A. Premièrement il vous faudra télécharger la version correspondant au framework .NET 4.5 à l'adresse suivante sur la plateforme CodePlex:
- http://ajaxcontroltoolkit.codeplex.com/releases/view/112805
- Le lien direct pour la version 4.5 est le suivant : http://ajaxcontroltoolkit.codeplex.com/downloads/get/736962
Dézipper finalement l'archive sur votre serveur pour pouvoir ensuite référencer les dlls.
B. Nous allons maintenant référencer les dlls suivantes dans le projet Visual studio :
- AjaxControlToolkit.dll
- AjaxMin.dll
C. Ajout des SafeControls à la solution: dans le dossier "Package" de votre solution cliquez sur le fichier Package.package pour le modifier, puis allez dans l'onglet "Advanced"
Cliquez sur Add puis sur "Add existing assembly", sélectionnez la dll AjaxControlToolKit depuis un sous-dossier de votre solution
- Name space :AjaxControlToolkit
- TypeName : *
- Assembly : AjaxControlToolkit, Version=4.5.7.1005, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e
- NameSpace: AjaxMin.dll
- TypeName: *
- Assembly : AjaxMin, Version=4.97.4951.28478, Culture=neutral, PublicKeyToken=21ef50ce11b5d80f
D.Ajoutez ensuite dans le fichier web.config de votre WebApplication situez sous le répertoire "C:\inetpub\wwwroot\wss\VirtualDirectories\[Your web application Port]" une référence à l'assembly référencé ou encore passez par une feature de scope Web Application avec l'event receiver suivant pour effectuer la modification automatiquement:
public override void FeatureActivated(SPFeatureReceiverProperties properties) { SPWebApplication webApp = properties.Feature.Parent as SPWebApplication; var configModAssembly = new SPWebConfigModification { Name = "add[@assembly=\"AjaxControlToolkit, Version=4.5.7.1005, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e\"]", Owner = "AjaxControlToolkitWebConfig", Path = "configuration/system.web/compilation/assemblies", Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode, Value = "<add assembly=\"AjaxControlToolkit, Version=4.5.7.1005, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e\" />" }; var configModAssembly2 = new SPWebConfigModification { Name = "add[@assembly=\"AjaxMin, Version=4.97.4951.28478, Culture=neutral, PublicKeyToken=21ef50ce11b5d80f\"]", Owner = "AjaxControlToolkitWebConfig", Path = "configuration/system.web/compilation/assemblies", Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode, Value = "<add assembly=\"AjaxMin, Version=4.97.4951.28478, Culture=neutral, PublicKeyToken=21ef50ce11b5d80f\" />" }; webApp.WebConfigModifications.Add(configModAssembly); webApp.WebConfigModifications.Add(configModAssembly2); /*Call Update and ApplyWebConfigModifications to save changes*/ SPWebService.ContentService.WebApplications[webApp.Id].WebConfigModifications.Add(configModAssembly); SPWebService.ContentService.WebApplications[webApp.Id].WebConfigModifications.Add(configModAssembly2); SPWebService.ContentService.WebApplications[webApp.Id].Update(); SPWebService.ContentService.WebApplications[webApp.Id].WebService.ApplyWebConfigModifications(); }
E.Déplacez la section suivante de votre fichier master .html depuis la balise head vers la balise body.
après:
Ajoutez également une référence dans votre masterpage avec la ligne suivante:
<%@Register TagPrefix="ajaxToolkit" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit, Version=4.5.7.1005, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" %>
Vous êtes maintenant prêt à utiliser les contrôles AjaxControlToolKit au sein de vos webparts.
lundi 23 juin 2014
Design : Sharepoint Palette tool 2013
Ami designer en herbe, Microsoft dispose d'un programme vous permettant de créer et de modifier les fichiers spColor qui constitue la partie thème de SharePoint.
Grâce à cette outil il est possible de générer automatiquement le fichier permettant de customizer votre portail en quelques clics.
Il ne reste plus qu'ensuite à importer le fichier grâce à SharePoint Designer dans le dossier
/_catalogs/theme/15 de votre site SharePoint Online ou SharePoint 2013
Et à modifier le thème de votre site via la page de modification d'apparence.
http://www.microsoft.com/en-us/download/details.aspx?id=38182
Grâce à cette outil il est possible de générer automatiquement le fichier permettant de customizer votre portail en quelques clics.
Il ne reste plus qu'ensuite à importer le fichier grâce à SharePoint Designer dans le dossier
/_catalogs/theme/15 de votre site SharePoint Online ou SharePoint 2013
Et à modifier le thème de votre site via la page de modification d'apparence.
http://www.microsoft.com/en-us/download/details.aspx?id=38182
vendredi 13 décembre 2013
SharePoint 2010 / 2013 Get all groups for SPUser including active directory group
SharePoint don't give you groups for SPUser if the right is given by an active directory group.
You have to merge groups specificied directly using user login in sharepoint groups and active directory groups.
private static List<SPGroup> GetAllUserGroups(SPUser user)
{
List<SPGroup> groups = new List<SPGroup>();
//Get groups from SharePoint
foreach (SPGroup spGroup in user.Groups)
{
groups.Add(spGroup);
}
string userLogin = user.LoginName;
You have to merge groups specificied directly using user login in sharepoint groups and active directory groups.
private static List<SPGroup> GetAllUserGroups(SPUser user)
{
List<SPGroup> groups = new List<SPGroup>();
//Get groups from SharePoint
foreach (SPGroup spGroup in user.Groups)
{
groups.Add(spGroup);
}
string userLogin = user.LoginName;
vendredi 6 septembre 2013
Difference between SharePoint 2013 versions
Note: Purple YES equals a Enterprise only feature. |
Developer features | SharePoint Foundation 2013 | SharePoint Server 2013—Standard Edition | SharePoint Server 2013—Enterprise Edition |
---|---|---|---|
Access Services | No | No | Yes |
App Catalog (SharePoint) | No | Yes | Yes |
App Deployment: Autohosted Apps | No | No | No |
jeudi 11 juillet 2013
Découvrez SharePoint ! / Discover SharePoint !
Découvrez SharePoint et l'étendue des fonctionnalités disponible sur
http://www.discoversharepoint.com/
http://www.discoversharepoint.com/
Store, Sync, And Share Your Content
mercredi 10 juillet 2013
SharePoint 2013 , change branding text content
Purpose
You can easily change the SharePoint branding text that appear in the left corner of you site thanks to this powershell code
PowerShell Snippet
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
$webApp = Get-SPWebApplication http://serveurSP
$webApp.SuiteBarBrandingElementHtml = "Larry's Microsoft Technologies Blog"
$webApp.Update()
Following this example you can also change the background color using CSS :
/* Modification couleur de la barre d'application */
/*Modification de la couleur du texte de la barre d'application */
#suiteBarLeft
{
background-color: rgb(229,226,221);
color: rgb(0,0,0);
font-weight:bold;
padding-left:5px;
}
/*Modification de la couleur du texte de la barre d'application */
#suiteBarLeft
{
background-color: rgb(229,226,221);
color: rgb(0,0,0);
font-weight:bold;
padding-left:5px;
}
lundi 8 juillet 2013
Installation and configuration of SharePoint 2013 Workflow feature
This post explain with video how to install and configure SharePoint 2013 Workflow (new server)
http://technet.microsoft.com/en-us/library/dn201724(v=office.15).aspx
http://technet.microsoft.com/en-us/library/dn201724(v=office.15).aspx
lundi 17 juin 2013
See all MSDN articles with Silverlight Pivot Viewer control
Affichage des articles MSDN sous forme d'un contrôle Pivot Viewer
Voici une petite page bien sympathique pour retrouver les articles MSDN, j'attire plus particulièrement votre attention sur la recherche (textbox en haut à gauche) qui est très pratique surtout pour rechercher les commandes powershell.
http://www.microsoft.com/resources/Technet/en-us/Office/media/ITProPivotViewer/
Package and deploy page layout and master page for SharePoint 2013
There is a lot of new parameters available in the new SharePoint 2013 about page layouts and master page packaging and deployment.
A couple of things have changed. The new markup that SharePoint itself uses for provisioning a page layout file looks like this:
XHTML
Provision a page layout in sharepoint 2013
A couple of things have changed. The new markup that SharePoint itself uses for provisioning a page layout file looks like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<File Path="PageLayouts\My-Article-Page.aspx" Url="My-Article-Page.aspx" Type="GhostableInLibrary" Level="Draft">
<Property Name="ContentTypeId" Value="0x01010007FF3E05 7FA8AB4AA42FCB67B453FFC100 E214EEE741181F4E9F7ACC43278EE811003A22BFC19B81124C923710F952434E5E" />
<Property Name="FileLeafRef" Value="My-Article-Page.aspx" />
<Property Name="MasterPageDescription" Value="This is my custom Article page for SharePoint 2010" />
<Property Name="UIVersion" Value="15" />
<Property Name="Title" Value="My Custom Article Page" />
<Property Name="PublishingHidden" Value="FALSE" />
<Property Name="PublishingAssociatedContentType" Value=";#Article Page;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900242457EFB8B24247815D688C526CD44D;#" />
<Property Name="HtmlDesignAssociated" Value="FALSE" />
<Property Name="ContentType" Value="Page Layout" />
<Property Name="_ModerationStatus" Value="3" />
<Property Name="FileDirRef" Value="_catalogs/masterpage" />
<Property Name="FSObjType" Value="0" />
</File>
|
Note: you can check this by creating a design package via the new Design Manager, and check the content that has been generated.
Provision a published version
<File Path="PageLayouts\My-Article-Page.aspx" Url="My-Article-Page.aspx" Type="GhostableInLibrary" Level="Draft">
<File Path="PageLayouts\My-Article-Page.aspx" Url="My-Article-Page.aspx" Type="GhostableInLibrary" Level="Published">
|
How to Provision Your Master Pages
For provision master pages, the same approach as discussed above can be used. The only difference will be the properties you're going to provide. The properties that I use in my elements file the following:
1
2
3
4
5
6
7
8
|
<File Url="your-master-page.master" Type="GhostableInLibrary" Level="Published" ReplaceContent="true">
<Property Name="ContentTypeId" Value="0x01010500BF544AFE46ACEF42B8DA22C9CE89526E" />
<Property Name="UIVersion" Value="15" />
<Property Name="Title" Value="Your Master Page Title" />
<Property Name="ContentType" Value="Master Page" />
<Property Name="_ModerationStatus" Value="0" />
<Property Name="FSObjType" Value="0" />
</File>
|
Inscription à :
Articles
(
Atom
)