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