Visualizzazione post con etichetta Sharepoint. Mostra tutti i post
Visualizzazione post con etichetta Sharepoint. Mostra tutti i post

mercoledì 27 maggio 2015

Custom ribbon in SharePoint 2013

Nel post di oggi verranno mostrati i passaggi per creare un custom ribbon nella barra multifunzione di SharePoint.

Per prima cosa è necessario creare una nuova SharePoint solution vuota in Visual Studio.

Aggiungere quindi un Empty Element, che servirà per definire lo stile e il comportamento del nostro ribbon.

Date un nome parlante all'elemento in modo da riconoscerlo tra gli altri.

A questo punto l'unica cosa che occorre fare è definire nel file Element.xml tutte le proprietà necessarie al funzionamento della nostra soluzione.

Riporto un esempio di seguito:

Andiamo ad analizzare da vicino il codice.

Nel tag CustomAction:
  • Id: indica l'identificativo univoco del ribbon
  • Location: il posto dove verrà visualizzato il ribbon (https://msdn.microsoft.com/en-us/library/office/ee537543.aspx)
  • RegistrationType: il ribbon può essere visibile in vari punti all'interno di SharePoint, come List,ContentType,ProgId e FileType
  • RegistrationId: va a specificare su quale tipo di lista deve essere pubblicata il ribbon
  • Title: il titolo del ribbon
CommandUIDefinition definisce l'interfaccia grafica del nostro ribbon:
  • Location: attributo molto importante, che va ad indicare in quale punto dovrà essere inserito il ribbon all'interno della barra multifunzione. Questo attributo è legato al tipo di lista definito in custom action e al tipo di elemento definito nel type.
    è possibile sovrascrivere un ribbon già esistente andando a settare uno di questi valori https://msdn.microsoft.com/en-us/library/office/ee537543.aspx, in alternativa è possibile aggiungere il ribbon ad un nodo figlio dell'elemento, nell'esempio viene inserito nei figli del tab action
Button è il controllo che verrà inserito nel ribbon, è possibile scegliere tra i seguenti controlli https://msdn.microsoft.com/en-us/library/office/ff458373.aspx#sectionSection1
  • Id: identificativo univoco del controllo
  • Command: riferimento del comando definito nell'elemento CommandUIHandler
  • Image16by16 e Image32by32: immagini da visualizzare nel ribbon
  • LabelText: testo da visualizzare nel controllo
  • Alt: testo alternativo
  • TemplateAlias: usato per dimensionare e posizionare il controllo nel gruppo dei ribbon
CommandUIHandler definisce gli eventi e le azioni utilizzabili nei controlli definiti in precedenza
  • Command: identificativo del comando
  • CommandAction: comando da eseguire all'attivazione dell'evento.
    NB: è necessario sapere che sono disponibili alcuni token che vengono sostituiti runtime, che indicano dove ci troviamo all'interno dell'applicazione di SharePoint 
    • {ItemId} 
    • {ItemUrl}
    • {RecurrenceId}
    • {SiteUrl} 
    • {ListId}
    • {ListUrlDir} 
    • {Source} 
    • {SelectedListId} 
    • {SelectedItemId}
A questo punto non rimane che deployare e vederne l'effetto.

Enjoy!

lunedì 8 luglio 2013

HOW TO: Copiare una lista in Sharepoint

In molti casi ci risulta necessario eseguire delle copie delle liste su un sito differente oppure semplicemente farci un backup su file.
Uno dei metodi possibili per fare queste operazioni è in modalità interfaccia.
Di seguito verranno illustrati i passaggi per realizzarla.

1) Esportazione della lista

Accedere alla lista in questione e cliccare su Impostazioni elenco:


Selezionare quindi l'operazione di salvataggio elenco:

Inserire nome file e nome modello.
Selezionare l'opzione Inclusione contenuto in modo da importare anche tutti i dati della lista.
NB: nel caso di campi di lookup questa operazione richiederà prima la creazione delle liste contenenti le anagrafiche poi le liste con la loro referenza.
Il file generato avrà come estensione .stp e conterrà tutte le informazioni della nostra lista.

2) Importazione della lista (.stp file)

Accedere tramite la funzionalità Azioni sito alla voce Impostazioni sito.
All'apertura della pagina delle impostazioni, sotto la voce Raccolte scegliere l'operazione Modelli di elenco:


Scegliere l'operazione di Carica documento per eseguire l'upload del file .stp

Accedere tramite la funzionalità Azioni sito alla voce Visualizza tutto il contenuto del sito.
Scegliere l'operazione di Crea per creare il nuovo elenco:

Inserire il titolo e quindi salvare



A volte però questa procedura non è sufficiente per copiare correttamente una lista.
Si rende necessario l'utilizzo di Powershell per l'export e l'import: il file verrà scaricato con l'estensione cmp e sarà possibile importarlo direttamente nel sito di destinazione.
Di seguito vedremo come fare:
Export:
Syntax:
Export-SPWeb -Identity <SiteURL> -Path <Path and File Name> [-ItemUrl <URL of Site, List, or Library>] [-IncludeUserSecurity] [-IncludeVersions] [-NoFileCompression] [-GradualDelete] [-Verbose]
Esempio:
export-spweb -identity http://<serverNameSource>/<siteSource> -path c:\list.cmp -itemurl /<siteSource>/lists/<listName>


Import:
Syntax: 
Import-SPWeb -Identity  <SiteURL>  -Path <ExportFileName>  [-Force] [-NoFileCompression] [-Verbose]
Esempio:
Import-SPWeb -identity http://<serverNameDestination>/<siteDestination> -path c:\list.cmp –force


martedì 9 aprile 2013

Utilizzo di librerie di terze parti nei progetti Sharepoint (WSP)

In fase di sviluppo di un qualsiasi progetto, non è raro di dover ricorrere ad utilizzare componenti esterni e librerie di terze parti.
A differenza di un classico progetto Asp.Net in cui il deploy delle librerie avviene manualmente nella bin di progetto o in Global Assembly Cache (GAC), nelle solution di Sharepoint è possibile scegliere in fase progettuale dove andranno a finire le dll quando verrà installata la solution (WSP).

Mantenendo un atteggiamento tradizionale alle applicazione Asp.Net, è possibile includere le librerie direttamente nel progetto wsp di Sharepoint, in modo da pubblicare gli assemblies direttamente nella posizione scelta (bin directory o GAC).

Un bel vantaggio non doversi ricordare di portarsi dietro componenti aggiuntivi, avendo a disposizione un punto centralizzato di deploy.
Ma cosa succede se dovessimo rimuovere la nostra solution dalla web application di Sharepoint?
Come accade in fase di installazione, anche la rimozione della solution agisce sulle librerie esterne pulendo dal target di deploy i componenti aggiunti al momento della pubblicazione.
Cosa accadrebbe però se un componente risulta condiviso dalle due solution, e una delle due viene rimossa?
La seconda solution non troverebbe più la referenza e genererebbe un problema in fase di runtime.

Di seguito viene riportata la soluzione per ovviare questo problema.

  1. Creiamo un nuovo progetto Sharepoint e aggiungiamo la referenza al componente da utilizzare (es. log4net.dll).
  2. Nelle proprietà del progetto spuntiamo l'opzione di non inclusione della dll di progetto compilata (VT.Log4net.dll) nel nostro package.
  3. Cliccare, aprire le impostazione del packege e aggiungere l'assembly coinvolto.
  4. Scegliere il target di pubblicazione (GAC o bin directory) e aggiungere i safe control se necessario.
Il nostro WSP a questo punto conterrà un assembly che vivrà di vita propria potrà essere eliminato o installato indipendentemente dalle solution dove è referenziato.




martedì 26 febbraio 2013

Recupero utente loggato Sharepoint 2010/2013 - Claims Based vs Classic Mode

Nelle applicazioni Sharepoint per recuperare l'utente loggato è sufficiente recuperare il login name dall'istanza del sito corrente nel seguente modo:
var strUsername = SPContext.Current.Web.CurrentUser.LoginName;
Questo funziona nel caso in cui la nostra autenticazione sia in "Classic Mode".
Nel in cui la il nostro tipo di autenticazione sia di tipo "Claims based" il risultato dell'istruzione sopra riportata sarà il seguente:
i:0#.w|Domain\ username
Occorrerà quindi differenziare le due tipologie di autenticazione utilizzando lo strumento SPClaimProviderManager fornito da Sharepoint contenuto in Microsoft.SharePoint.Administration.Claims
string strUsername = string.Empty;
 
SPClaimProviderManager mgr = SPClaimProviderManager.Local;
 
if (SPClaimProviderManager.IsEncodedClaim(SPContext.Current.Web.CurrentUser.LoginName))
    strUsername = mgr.DecodeClaim(SPContext.Current.Web.CurrentUser.LoginName).Value;
else
    strUsername = SPContext.Current.Web.CurrentUser.LoginName;
Di seguito alcuni riferimenti al tema:
http://www.wictorwilen.se/Post/How-Claims-encoding-works-in-SharePoint-2010.aspx 
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.claims.spclaimprovidermanager.aspx
http://blog.mastykarz.nl/programmatically-converting-login-name-claim/

venerdì 22 febbraio 2013

CAML Query e CamlexNET

Un pò di documentazione sul linguaggio CAML

Per creare e modificare queste query utilizzeremo il tool CamlexNET.
Di seguito alcuni esempi di utilizzo:
using CamlexNET;
using System.Linq.Expressions;

var expressions = new List<Expression<Func<SPListItembool>>>();
 
if (!string.IsNullOrEmpty(AreaTematica))
{
    expressions.Add(x => ((string)x["AreaTematica"] == AreaTematica || (object)x["AreaTematica"] == null));
}
 
 
if (!string.IsNullOrEmpty(FamigliaProdotto))
{
    expressions.Add(x => ((object)x["FamigliaProdotto"] == FamigliaProdotto || (object)x["FamigliaProdotto"] == null));
}
 
if (!string.IsNullOrEmpty(Societa))
{
    expressions.Add(x => ((object)x["SocietaGruppo"] == Societa || (object)x["SocietaGruppo"] == null));
}

var xml = Camlex.Query().WhereAll(expressions).ToString();

SPQuery query = new SPQuery();
query.Query = qry;
var items = list.GetItems(query);