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)

lunedì 19 giugno 2017

Attenzione!! Rimuovete l'attributo 'Version' se esportate e importate le Site Columns con Powershell

Come dice il titolo, eliminate l'attributo 'Version' da ogni tag Field che lo contiene nel file XML generato se esportate e importate le Site Columns con Powershell, altrimenti non potrete modificare la Site Column in nessun modo.

domenica 4 giugno 2017

Aggiornare un Taxonomy Field utilizzando l'object model

(Aggiornamento: accertatevi di avere gli stessi language packs se lavorate su farm diverse per via dei campi aggiunti alla TaxonomyHiddenList)


Per aggiornare un campo Taxonomy va utilizzato il metodo statico SetFieldValue della classe TaxonomyField. Nel caso però in cui il campo appartiene ad un content type pubblicato attraverso il Content Type Hub o sia creato in Visual Studio e la definizione non sia del tutto corretta si avrà il seguente criptico errore "The SPListItem being updated was not retrieved with all taxonomy fields". Il metodo sicuro per l'update è il seguente, dove aggiorniamo un taxonomy field multivalued, per i single valued si utilizza TaxonomyFieldValue e non TaxonomyFieldValueCollection, e il tutto si basa sul fatto che il TaxonomyField ha un campo Note nascosto associato:


  // create new TaxonomySession based on the current Site
TaxonomySession taxonomySession = new TaxonomySession(oSite);
TermStore termStore = taxonomySession.DefaultKeywordsTermStore;

// connect to the Term Store Group
var group = termStore.Groups["Mio Gruppo"];
TermSet temaChoice = null;

for (var i = 0; i < group.TermSets.Count; i++)
 {
   if (group.TermSets[i].Name == "Mio Campo")
    {
      temaChoice = group.TermSets[i];
      break;
    }
 }


TaxonomyField tagsField = (TaxonomyField)ctype.Fields.GetField("Mio Campo");


 var results = temaChoice.GetTerms("label_termine", false);
 if (results.Count > 0)
 {
   string TermGuid = Convert.ToString(results[0].Id);
   Guid TermID = new Guid(TermGuid);
   Term ToAddTerm = temaChoice.GetTerm(TermID);
   TaxonomyFieldValue taxonomyFieldValue = new                  TaxonomyFieldValue(tagsField);
   taxonomyFieldValue.TermGuid = ToAddTerm.Id.ToString();
   taxonomyFieldValue.Label = ToAddTerm.Name;
   int[] wssIds = TaxonomyField.GetWssIdsOfTerm(oSite,                  ToAddTerm.TermStore.Id,                                              ToAddTerm.TermSet.Id, ToAddTerm.Id, false, 1);
   if (wssIds.Length>0)
       taxonomyFieldValue.WssId = wssIds[0];
                      taxonomyFieldValueColl.Add(taxonomyFieldValue);
            }

item[tagsField.Id] = taxonomyFieldValueColl.ToString();
item[tagsField.TextField] = taxonomyFieldValueColl.ToString();
item.Update()


mercoledì 19 aprile 2017

Impossibile collegarsi a Sharepoint attraverso un host header

Il problema si verifica se ho aggiunto un host header in IIS sul sito web che ospita un'applicazione Sharepoint e l'ho mappato nel file hosts come 127.0.0.1, In questo caso accedendo al sito mi verranno richieste continuamente le credenziali, ma il login fallirà continuamente.

Sono due le possibili soluzioni:

1 Disabilitare il Loopback Check


Aprre un prompt amministrativo di PowerShell e digitare:

New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name “DisableLoopbackCheck” -value “1” -PropertyType dword

Oppure da regedit, navigare fino alla chiave

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

e creare una chiave dword32 di nome DisableLoopbackCheck e settandone il valore a 1

2 Aggiungere al registry la chiave Multistring BackConnectionHostNames


Da regedit accedere alla chiave

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0

e creare la chiave Mulstring BackConnectionHostNames. Come valore vanno inseriti uno dopo l'altro tutti gli host-header definiti


lunedì 12 dicembre 2016

The program w3wp.exe, with the assigned process ID, could not authenticate locally by using the target name HTTP/WEBSITENAME

Un breve post su un errore molto particolare (mi si è presentato solo dopo aver spostato i content db). In Sharepoint si manifesta con l'impossibilità di navigare sulla pagina "settings.aspx", che richiede 3 volte l'autenticazione e poi da' "blank page". Sull'Event Viewer verrà segnalato un errore simile a questo:
"The program w3wp.exe, with the assigned process ID, could not authenticate locally by using the target name HTTP/WEBSITENAME. The target name used is not valid. A target name should refer to one of the local computer names, for example, the DNS host name. Try a different target name"
I passi da seguire sono questi:
  1. Andare su REGEDIT e aprire la chiave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0 
  2. Click con il destro su MSV1_0 –> New -> Multi-String Value 
  3. Il nuovo Multi-String Value va rinominato "BackConnectionHostNames"
  4. Click con il destro sul valore appena creato e selezionare "Modify" 
  5. Inserire l'hostname del sito (per esempio: serverSP1) e nella riga sotto il FQDN (per esempio: serverSP1.mydomain.local)
  6. Riavviare IIS

giovedì 13 ottobre 2016

JQuery scrolling in SharePoint

Veloce post per mia futura memoria e perchè ho passato mezz'ora ad adattare un componente JQuery a funzionare in una master page Sharepoint 2013.
Se avete nel vostro Javascript una funzione del tipo:

$window.scroll(function () {

dovete sapere che in Sharepoint 2013 il body NON scrolla, scrolla solo il div con id s4-workspace. Perciò ogni riferimento all'oggetto $window va sostituito con quello al div e perciò:

$window.scroll(function () { --> $('#s4-workspace').scroll(function () {
$window.scrollTop --> $('#s4-workspace').scrollTop
.......
.......
ecc. Happy JQuery coding su Sharepoint :-)

venerdì 7 ottobre 2016

Fix dell'errore - “Internet Explorer cannot display the webpage” durante la creazione di nuove web application in Sharepoint 2013

Oggi il fix per un errore abbastanza comune soprattutto in farm con hardware "povero". Durante la creazione di una nuova Web Application in SharePoint 2013 può accadere che vi venga mostrato un popup con il messaggio: "Internet Explorer cannot display the webpage" (vedi figura):



Le cause possibili sono due:
  • troppe web application
  • Sharepoint è troppo lento
In questo post do' una risoluzione (o meglio un workaround) al secondo caso.  In pratica, durante il processo di creazione di una web application, Sharepoint fa lo shutdown degli application pools che hanno un timeout di circa 90 secondi di default. Quindi quello che faremo è aumentare il timeout dell'application pool della Central Administration. Quindi:

  • sul server dove c'è la Central Admin aprire IIS manager.
  • nella tree view, espandere il nome del server e cliccare su Application Pools.
  • individuare la SharePoint Central Administration v4 application pool. Cliccare con il destro e scegliere Advanced Settings.



Vanno aumentati i seguenti valoi come in figura:
  • Ping Maximum Response Time
  • Shutdown Time Limit (seconds)
  • Startup Time Limit (seconds)