lunedì 18 dicembre 2017

Open in file explorer

Da vecchio utilizzatore di Sharepoint e per inveterata abitudine uso sempre la scorciatoia "open in file explorer". Purtroppo ormai sembra retaggio solo di IE, quindi a promemoria futura: in file explorer \\sitosharepoint\DavWWWRoot e http://sitosharepoint/_catalogs/masterpage

martedì 21 novembre 2017

Piccolo vademecum (un po' criptico :-) ) per SP Framework

windows powershell come amministratore
cd su directory soluzioni
cd directory della soluzione
code . (chi sa il perchè di questo comando? :-) )
gulp serve è per testarla localmente
npm shrinkwrap opzionale è per bloccare le dipendenze del progetto
gulp bundle --ship build (package-solution.json per la versione)
gulp package-solution --ship per creare il package per il deploy su SPO

giovedì 2 novembre 2017

Error occurred in deployment step 'Recycle IIS Application Pool': Provider load failure

Non è un errore molto diffuso, ma prima di rompervi la testa come ho fatto io, si risolve semplicemente installando gli IIS 6 Compatibility components come indicato qui.




venerdì 27 ottobre 2017

Per chi inizia con gli Sharepoint add-ins

Un po' di codice già pronto da utilizzare in tutti gli addins Sharepoint-hosted che debbano accedere all'host web.

// Function to retrieve a query string value.
// For production purposes you may want to use
//  a library to handle the query string.
function getQueryStringParameter(paramToRetrieve) {
    var params =
        document.URL.split("?")[1].split("&");
    var strParams = "";
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split("=");
        if (singleParam[0] == paramToRetrieve)
            return singleParam[1];
    }
}

var clientContext = SP.ClientContext.get_current();
var hostweburl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));
var appweburl = decodeURIComponent(getQueryStringParameter("SPAppWebUrl"));


$.getScript("../_layouts/15/SP.RequestExecutor.js", initializePart);

function initializePart() {
    var factory = new SP.ProxyWebRequestExecutorFactory(appweburl);
    clientContext.set_webRequestExecutorFactory(factory);
    var appContextSite = new SP.AppContextSite(clientContext, hostweburl);
    workWeb = appContextSite.get_web();
    clientContext.load(workWeb);
    clientContext.executeQueryAsync(ongetWebSuccess, ongetWebFail);
}



lunedì 23 ottobre 2017

Powershell Script per rimuovere la version da un campo

Dopo essermi scontrato di nuovo con questo problema (che è micidiale nel caso dei Taxonomy o Managed Metadata Fields), ecco uno script PowerShell per rimuovere la version da un campo anche se è già contenuto in un content type. PowerShell rules!! :-)



$name = "qui ci va l'internal name del campo"
$url = "qui ci va l'url della sitecollection"
Write-Host ("Remove Version flag from '{0}' in '{1}'" -f $name, $url)

$web = Get-SPWeb $url
$web = $web.site.RootWeb
$field = $web.Fields.GetFieldByInternalName($name)
if (!$field) {
    Write-Host "> Can't find field!" -ForegroundColor:Red
    break
}
[xml]$xml = $field.SchemaXml
$contenttypenames = $web.ContentTypes | ? { $_.FieldLinks | ? { $_.Id -eq $field.ID } } | ? { $_.Parent.Fields.ContainsFieldWithStaticName($field.InternalName) -eq $false } | % { Write-Output $_.Name }

$contenttypenames | % {
    $contenttypename = $_
    write-host ("> Remove field link from {0}..." -f $contenttypename) -ForegroundColor:Green
    $ct = $web.ContentTypes[$contenttypename]
    $ct.FieldLinks.Delete($name)
    $ct.UpdateIncludingSealedAndReadOnly($true)
}

$field = $web.Fields.GetFieldByInternalName($name)
if ($field) {
    Write-Host "> Deleting existing field..." -ForegroundColor:Green
    $web.fields.Delete($name)
}

Write-Host "> Adding field (version removed)..." -ForegroundColor:Green
$xml.Field.RemoveAttribute("Version")
$web.Fields.AddFieldAsXml($xml.OuterXml) | Out-Null

$contenttypenames | % {
    $contenttypename = $_
    Write-Host ("> Adding field link to {0}..." -f $contenttypename) -ForegroundColor:Green
    $field = $web.Fields.GetFieldByInternalName($name)
    $fieldlink = New-Object Microsoft.SharePoint.SPFieldLink($field)
    $ct.FieldLinks.Add($fieldlink)
    $ct.Update($true)
}

martedì 10 ottobre 2017

Search Engine Optimization (SEO) - Minimizzare js e css

Vi segnalo velocemente un articolo nel caso dobbiate ottimizzare un sito per i motori di ricerca e vogliate minimizzare i files js e Css per migliorare la Page speed. L'articolo propone di utilizzare Microsoft Ajax Minifier disponibile a questo link e tratta il caso di un app Sharepoint, ma le indicazioni in esso contenute vanno bene per un qualunque progetto Sharepoint. Automating JavaScript and CSS Minification In SharePoint Apps


martedì 8 agosto 2017

Esportare una lista in XML

Il trucco è conosciuto e consiste nell'utilizzare questo formato di url

http://<site url>/_vti_bin/owssvr.dll?Cmd=Display&List=<listid>&View=<view guid>&Query=*&XMLDATA=TRUE

Una volta ottenuto il file xml con un po' di pazienza e di codice potete importare le liste cosí serializzate in un'altra farm (previa creazione degli eventuali custom content types creati)