giovedì 16 settembre 2021

HTML Entities negli HTML Page Layouts di Sharepoint

 Se utilizzate gli HTML Page Layouts, avrete notato che le HTML Entities (tipo à o ù) vengono renderizzati con la codepage sbagliata e vengono visualizzati tutti come Ã

Il trucco consiste nell'aggiungere il meta tag

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

negli "Additional Page Headers" (N.B.: non basta metterlo nella master page, va aggiunto sul page layout)



giovedì 2 settembre 2021

Come cancellare un Content Type con l'errore "The content type is part of an application feature"

 L'errore in "The content type is part of an application feature" significa che il content type è stato deployato attraverso una feature custom. In questo modo Sharepoint non riesce a farne la cancellazione perchè un flag nella tabella "ContentTypes" del Content Database (IsFromFeature) è uguale a 1 (vedi qui per l'articolo completo).




Quindi direttamente da SQL Server, prima individuiamo il record che ci serve attraverso questa query


SELECT [SiteId]
      ,[Class]
      ,[Scope]
      ,sys.fn_varbintohexstr([ContentTypeId]) as CT
      ,[Version]
      ,[NextChildByte]
      ,[Size]
      ,[Definition]
      ,[ResourceDir]
      ,[IsFromFeature]
  FROM [MyContentDB].[dbo].[ContentTypes]
where (sys.fn_varbintohexstr(ContentTypeId) 
LIKE '[mio content type ID]%')

Dopodichè va settato il flag a 0 con questa query

Update [MyContentDB].[dbo].[ContentTypes] 
set [IsFromFeature] = 0 
where (sys.fn_varbintohexstr(ContentTypeId) 
LIKE '[mio content type ID]%')

lunedì 26 luglio 2021

Esportare il contenuto di una lista Sharepoint

 Per estrarre velocemente in formato XML il contenuto di una lista o di una document library, basta navigare sul seguente url

http://[siteURL]/_vti_bin/owssvr.dll?Cmd=Display&List={GUID LIST}&Query=*&XMLDATA=TRUE


Vedi un articolo più approfondito qui

martedì 13 luglio 2021

Errore Restore-SPSite : 0x80070003

 L'errore si presenta su un restore di una sitecollection se lo schema della farm di provenienza non coincide con quello di destinazione. Se si guarda l'ULS Viewer si avrà un errore di questo tipo


Could not deserialize site from C:\Backup\example1.bak. Microsoft.SharePoint.SPException: Schema version of backup 15.0.4505.1005 does not match current schema version 15.0.4420.1017

In questo caso basta utilizzare un editor esadecimale (per esempio Hex editor Neo) per cambiare lo schema version (vedi figura).















Vedi qui per una spiegazione più esauriente.

lunedì 24 maggio 2021

Utilizzare Azure Automation con Sharepoint Online

 Nel caso voleste creare un runbook per accedere con powershell ad un tenant Sharepoint Online, vanno utilizzate alcune accortezze nell'importazione dei moduli disponibili (un articolo più esaustivo qui How to use Azure Automation with SharePoint Online – Part One ). I passi da seguire sono:

  • Aggiungere il modulo MSOnline dalla galleria dei moduli

  • Aggiungere le SharePoint CSOM DLL, facendone il download da questo link. Una volta installate o decompresse sul proprio PC, creare una directory chiamata Microsoft.SharePoint.Client e copiarci le dll Microsoft.SharePoint.Client.dll e Microsoft.SharePoint.Client.Runtime.dll. Creare un archivio zip della directory e aggiungere ai moduli il file Microsoft.SharePoint.Client.zip così creato



  • Aggiungere il modulo SharePointPnPPowerShellOnline 


giovedì 20 maggio 2021

Come compilare widget VUE

 Post veloce

  • Installazione yarn nel PC

npm install --global yarn
  • Installazione dependecies di yarn
yarn install
  • Test della build del widget
yarn serve
  • Build del widget
yarn build

giovedì 29 aprile 2021

Telerik - Visual Studio - The specified task executable "lc.exe" could not be run

Succede quando aggiungete in un progetto su Visual Studio un controllo Telerik (per esempio in una pagina .aspx o in un controllo .ascx). L'errore completo è 





Basta in Visual Studio cambiare la Build Action da "Embedded Resource" a "None".




 


venerdì 16 aprile 2021

Telerik RadAsyncUpload

 Un post veloce (anche per mio futuro remainder) sul componente Telerik RadAsyncUpload. Ricordarsi sempre di configurare con i giusti permessi la cartella temporanea che utilizza per l'upload dei file (quella di default è \App_Data\RadUploadTemp ), altrimenti vi darà l'errore mostrato qui sotto.



La soluzione migliore è gestire via codice il salvataggio del file sull'evento FileUploaded

protected void RadAsyncUpload1_FileUploaded(object sender, FileUploadedEventArgs e)
{
    //Get reference of the RadAsyncUpload
    RadAsyncUpload upload = (RadAsyncUpload)sender;
 
    //UniqueID
    var id = Guid.NewGuid().ToString();
 
    //Generate the Target folder according to the Test's ID
    string target = Server.MapPath("~/Tests/" + id.ToString() + "/");
 
    //Check if the generated target folder exists. If it doesn't create it.
    if(!Directory.Exists(target))
    {
        Directory.CreateDirectory(target);
    }
 
    //Get the full file name
    string fullFileName = target + e.File.FileName;
    //Save the file
    e.File.SaveAs(fullFileName);
}





martedì 13 aprile 2021

Link diretto al download del file su OneDrive for Business

 La funzionalità "Copy Link" di Onedrive for business crea sempre dei link indiretti al file da scaricare. Per ottenere il link diretto (da utilizzare per esempio in Download Manager per Chrome), basta utilizzare la funzionalità "Copy Link" e scegliere "People with existing access" e dal link così ottenuto eliminare tutto ciò che c'è dopo il "?" e sostituirlo con "?download=1"

https://mytenant-my.sharepoint.com/:w:/r/personal/tenant_onmicrosoft_com/Documents/Documento.docx?d=wf97c18d1857745d3b8e0b14c1afa9f6b&csf=1&web=1&e=JLfBTr 

diventa

https://mytenant-my.sharepoint.com/:w:/r/personal/tenant_onmicrosoft_com/Documents/Documento.docx?download=1




martedì 30 marzo 2021

Use Information List

 In Sharepoint fin dalla versione 2007, in ogni sitecollection esiste una lista nascosta raggiungibile dall'URL [site collection url]/_catalogs/users/simple.aspx . Questa lista contiene informazioni sugli utenti quali Email, DisplayName, LoginName, ecc.


Per interagire con gli SPListItem della lista si puà utilizzare del codice simile a questo

// Instantiates the User Information List 
SPList userInformationList = SPContext.Current.Web.SiteUserInfoList;

// Get the current user 
SPUser user = SPContext.Current.Web.EnsureUser(@"MYDOMAIN\myUser");

// The actual User Information is within this ListItem 

SPListItem userItem = userInformationList.Items.GetItemById(user.ID);