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

martedì 9 gennaio 2018

Sharepoint Framework node_modules clean, fixed e pronta per SPFX 1.4

C'è già jquery, jquery-ui, moment, fullcalendar 3.4.0 e sweetalert2
Disponibile a questo link. Copia e incolla nella directory della solution
Vi aggiungo anche il contenuto del tsconfig.json che è molto cambiato

{
  "compilerOptions": {
    "target": "es5",
    "forceConsistentCasingInFileNames": true,
    "module": "commonjs",
    "jsx": "react",
    "declaration": true,
    "sourceMap": true,
    "experimentalDecorators": true,
    "skipLibCheck": true,
    "typeRoots": [
      "./node_modules/@types",
      "./node_modules/@microsoft"
    ],
    "types": [
      "es6-promise",
      "webpack-env"
    ],
    "lib": [
      "es5",
      "dom",
      "es2015.collection"
    ]
  }
}