venerdì 9 agosto 2019

SPFX - Nel caso un pacchetto risulti outdated durante il processo di build

Capita ogni tanto che lanciando il comando gulp bundle --ship build la build non riesca perchè qualche pacchetto risulta outdated. Nel mio caso l'errore era "Browserslist: caniuse-lite is outdated. Please run next command npm update caniuse-lite browserslist". In realtà il messaggio è fuorviante e spesso lanciare semplicemente npm update con il nome del pacchetto da aggiornare non risolve niente (questo a partire da npm@2.6.1, vedi qui). Il trucco consiste nell'utilizzare il parametro depth per aggiornare le dipendenza anche in pacchetti annidati molto in profondità nella gerarchia del progetto. Nel mio caso ho lanciato
npm update --depth 10 caniuse-lite browserslist e ho risolto.

martedì 7 agosto 2018

SPFX The property '__metadata' does not exist on type 'SP.Social.SocialActorInfo'. Make sure to only use property names that are defined by the type.

L'errore compare nelle chiamate effettuate con  SPHttpClient.post e oltre a SP.Social.SocialActorInfo può riguardare qualunque altro tipo Sharepoint (SP. ecc.). La causa dell'errore è da ricercarsi nel fatto che SPHttpClient appende sempre un header odata-version: 4.0 . La soluzione è fare l'override dell'header usando un oggetto ISPHttpClientOptions e fare la chiamata post utilizzando tale oggetto come parametro (vedi questo articolo):

const options: ISPHttpClientOptions = {
   headers: {'odata-version':'3.0'},
   body: {'query': {'__metadata': ...
};

lunedì 11 giugno 2018

Fix dell'errore Error occurred in deployment step 'Retract Solution': XXXXXX cannot be deserialized because it does not have a public default constructor

L'errore in questione si ottiene facendo il deploy di una soluzione in cui non è specificato un costruttore pubblico vuoto. Finora mi si è verificato solo sui Timer Jobs. Purtroppo il fix non è semplice. Vanno seguiti i seguenti passi:
  1. Sistemare il codice aggiungendo il costruttore mancante
  2. Fare il deploy in GAC dell'assembly così ottenuto, utilizzando gacutil
  3. IISRESET
  4. Eseguire il Retract della solution da Central Administration o con powershell
E qui una dettagliata guida su come scrivere un timer Job (è per SP 2010, ma va sempre bene :-))

mercoledì 2 maggio 2018

String.Format in Javascript

Un'utile funzione Javascript per implementare l'equivalente della String.Format del C#

 String.prototype.format = function () {
            var str = this;
            for (var i = 0; i < arguments.length; i++) {
                var reg = new RegExp("\\{" + i + "\\}", "gm");
                str = str.replace(reg, arguments[i]);
            }
            return str;
        }

martedì 6 marzo 2018

Accesso _spPageContextInfo details in SharePoint Framework

Sono informazioni legacy, ma sempre utili perchè non c'è l'equivalente diretto in SPFX.
L'articolo completo è qui

Esempio di utilizzo


Alcune delle proprietà disponibili


martedì 27 febbraio 2018

$.noConflict();

Su Sharepoint Online assolutamente chiamare $.noConflict(); dopo la prima chiamata a _spBodyOnLoadFunctionNames. Però non è chiaro perchè su Sharepoint 2013 OnPremise non da' lo stesso problema...Più che un post questo è un mio ragionamento, quindi cambio ogni tanto: in realtà va chiamato prima del solito plugin  jQuery problematico.

Appunti veloci su come importare librerie javascript esterne

Facciamo un esempio con una libreria ipotetica che chiamiamo jstest.
  1. npm install @types/jstest, questo è il modo canonico
  2. se non esistono i types (cioè non è stato definito un file .d.ts con la dichiarazione del modulo), allora:
  3. Cercare su DefinitelyTyped qualcosa di equivalente
  4. Editare o creare un file .d.ts con Closure o a mano
  5. Utilizzare SPComponentLoader.loadScript e fare il cast ad 'any' prima di utilizzare le funzioni della libreria