venerdì 9 ottobre 2015

SharePoint List Item attachment: "old" browser compatibility

Hi everybody!
If you need to add an attachment to an existing list item in SharePoint, which solution would you consider?

Well, using REST API, make a POST call, getting the file content with a File Reader and passing the Blob as body.

Simple, isn't it?

Sure, but which browser are you using? I hope for you Chrome, Firefox and IE...10.
Because, if you need to make the solution compatible with IE9, you will feel much pain.
In fact, reading Marc Anderson's post:
To upload a file to a list you need to make use of the fileReader javascript class, using the readAsDataURL method and stripping the first part off the dataurl to get the base64 component. Then submit this to SPServices.
So, to make the solution working with the bloody IE9, I have used the following ingredients:
  • ngFileReader: angular component, compatible IE8+, that allow you to read the file content through the readAsDataURL method.
  • Stripping the first part of the file content off to get the base64 component.
    var BASE64_MARKER = ';base64,';
    var parts = dataURL.split(BASE64_MARKER);
    contentType = parts[0].split(':')[1];
    var data = parts[1];
  • Calling the $().Service passing the data retrieved above
    var deferred = $q.defer();
    jQuery().SPServices({
      operation: 'AddAttachment',
      async: true,
      listName: listId,
      listItemID: itemId,
      fileName: fileName,
      attachment: data,
      completefunc: function(xData, Status) {
        deferred.resolve(xData);
      }
    });
    return deferred.promise;
Otherwise, if you are using also a "modern" browsers, you can get rid of the previous implementation, creating the Blob from the file content

var BASE64_MARKER = ';base64,';
var parts = dataURL.split(BASE64_MARKER);
contentType = parts[0].split(':')[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;

var uInt8Array = new Uint8Array(rawLength);

for (var i = 0; i < rawLength; ++i) {
  uInt8Array[i] = raw.charCodeAt(i);
}

return new Blob([uInt8Array], {type: contentType});

and then setting this object (var file in the code snippet below) as data parameter to build the Ajax POST call to the SharePoint Web API endpoint.

var url = _spPageContextInfo.webServerRelativeUrl + "/_api/web/lists/GetById('" + listId + "')/items("+ itemId +")/AttachmentFiles/add(FileName='"+ fileName +"')"
      
var params = {
  method: "POST",
  url: url,
  data: file,
  headers: {
    "X-RequestDigest": jQuery("#__REQUESTDIGEST").val()
  }          
};

Thats all!

martedì 23 dicembre 2014

Addio pizzo 3.0: il nostro contributo

Guardo poco la TV che sta per TeleVisione perché mi annoia, perché non trovo contenuti che mi stimolino e che possano essere interessanti culturalmente.

Ma una trasmissione che non posso proprio perdermi è quella de "Il Testimone" condotta dal bravissimo Pif, il quale non è solo in grado di raccontare tanti aspetti della nostra società in modo ironico, interessante, intelligente, sarcastico ma è anche in grado di fare televisione di qualità, toccando temi di cui la TV moderna è orfana forse dai tempi di Enzo Biagi.

Tra le tante puntate interessanti, quella su Addio Pizzo mi ha sicuramente toccato nel personale.
Ho così deciso di scrivere ad alcuni esponenti della città di Caccamo e all'Onorevole Rosy Bindi, unica email che di seguito riporto.

"Salve On. Bindi,
le scrivo una lettera molto breve, senza troppi ragionamenti patriottici o morali perché, per questa occasione, non dovrebbero servire.

Mico Geraci, sindacalista di una cittadina del Sud, brutalmente ammazzato dalla mafia nel 1998 davanti all'uscio di casa.
Ammazzato perché scomodo, perché persona onesta e coraggiosa nel portare avanti gli ideali di correttezza, giustizia, legalità.
La mafia l'ha brutalmente assissanato, violentando anche i suoi cari ancora feriti nella memoria non solo perché è stata sfregiata la propria dimora, posto in cui ci si dovbrebbe sentire protetti, ma sopratutto perché non si sentono protetti neanche dallo Stato: si sentono soli ad affrontare queste difficoltà perché dopo quasi 20 anni quei sicari sono ancora liberi di poter violentare altre persone oneste e giuste e sono liberi di poter guardare negli occhi i familiari di Mico.
Quale umiliazione più grande si può subire?
Le chiedo di poter fare tutto quello che è in suo possesso per poter accellerare quell'inchiesta.
Le chiedo di poter operare come Mico e tanti altri uccisi dalla mafia: con coraggio, determinazione, forza.
Ne abbiamo bisogno noi e il nostro futuro, ne ha bisogno la dignità delle persone uccise e delle loro famiglie, assetate di giustizia.
Noi, in quanto cittadini, siamo disposti a tutto pur di appoggiarvi perché c'è bisogno dell'apporto di tutti.
Ma il vostro è certamente fondamentale.

Convinto che potrà ascoltare il mio appello,
La Saluto e le Auguro Buone Feste!"

So che questo Blog non ha visibilità di MTV, che io non sono Pif e oltre a non essere famoso quanto lui non sono certamente bravo come lui, ma spero che chiunque legga per caso o capiti per caso da queste parti possa leggere questo post, magari guardare la puntata, possa pensare alle tematiche toccare da Pif e perché no, possa farsi sentire dai cittadini di Caccamo che hanno scelto di cambiare strada e da Rosy Bindi sull'uccisione di Mico Geraci.

Navigando questa pagina troverete tutte le informazioni per contattare i protagonisti di Caccamo e capire meglio tutta la vicenda, partendo dalla prima puntata de "Il Testimone" dedicata a questo tema.

La mafia è una montagna di merda che cresce inesorabilmente: se la lasciamo spalare a poche persone, queste non riusciranno mai a spalacerla di torno.
Quindi riflettiamo, pensiamo, guardiamoci dentro, inforchiamo la pala e diamo una mano a queste persone normali ma straordinarie, mettendo a disposizione la nostra semplicità e i nostri valori!
Combattere la mafia si può e si deve fare partendo dalla nostra quotidianeità!

Buone Feste a tutti!

lunedì 24 novembre 2014

SharePoint 2013: Sign in as Different User

SharePoint 2013 does not include the ability to log in as another user...and this sometimes could be painful.

There are several solutions to this problem:
  1. Start your browser as a different user
  2. Use the _layouts/closeConnection.aspx?loginasanotheruser=true page
  3. Add a link to _layouts/closeConnection.aspx?loginasanotheruser=true page either in master page or in the left menu of page that you need to modify adding a security trimmed control in order to render this link only to certain users. For this purpose see Security Trimmed Control
  4. Edit the Welcome.aspx to include the link again (Sign in as Different User and SharePoint 2013)
  5. Use JavaScript as a Bookmarklet (SharePoint 2013 – Sign in as Another User)
I do not suggest the third option: the customization of the layouts pages is not the best solution and it is not safe in case of updates on the server farm (like configuration of service pack, etc).
Moreover, this link cannot be trimmed and probably this functionality have to be avoided to certain users.

My advice is to use other solutions such as the 2, 3 or 5.
For more information, please read the official MSDN article about this problem: "Sign in as Different User" menu option is missing in SharePoint Server 2013

Enjoy!

AC


martedì 4 novembre 2014

JSON in place with IE

How many time have you tried to do a REST call in IE expecting to display the JSON data but the browser IE has prompted to download it?
To me, too many!

The solution to this problem is to update the registry telling IE that for docs that have a mime type of application/json, just view it in place. This won't affect any application/json documents downloaded via script tags, or via XHR, and so on.

How it works

Stop IE. Then, cut and paste the following into a file, by the name of json.reg.
 
 Windows Registry Editor Version 5.00  
 ;  
 ; Tell IE to open JSON documents in the browser.   
 ; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .  
 ;   
 [HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]  
 "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"  
 "Encoding"=hex:08,00,00,00  
 [HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]  
 "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"  
 "Encoding"=hex:08,00,00,00  

Then double-click the .reg file and restart IE. Eventually the response you will have for Content-Type: application/json or Content-Type: text/json will be correct.

 {   
   "OutcomeType": 0,   
   "Message": null,   
   "Exception": null,   
   "Value": {   
     "Detail": {   
       "EquipmentCode": null,   
       "DocumentNumber": "1245",   
       "PurchaseCustomerNumber": "quote",   
       "OrderReason": 0,   
       "CreationDate": "2014-10-31",   
       "StartValidityDate": null,   
       "EndValidityDate": null,   
       "Value": 0,   
       "Currency": null,   
       "Approved": 1  
     },   
     "Items": [   
       {   
         "PositionNumber": "000010",   
         "MaterialCode": "4355656",   
         "Description": "Item 1",   
         "TotalAmount": 12,   
         "SchedulDate": null,   
         "ShippedAmount": 0,   
         "BilledAmount": 0,   
         "NetValue": 96.48,   
         "GrossValue": 100.44,   
         "Currency": "EUR",   
         "SalesUnit": null  
       }  
     ]  
   }  
 }  

For Chrome and FF it is more simple: just download the add-on JSON Viewer!
FF: https://addons.mozilla.org/it/firefox/addon/jsonview/
Chrome: https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh

Enjoy!

giovedì 9 ottobre 2014

Stagione Triathlon Terminata

Con la Coppa Crono TT, campionato italiano a squadre sulla distanza Sprint dispotatosi a Riccione, è arrivata l'ultima gara della stagione.

Inaspettatamente è arrivato un 17 esimo posto assoluto, dovuto un pò al caso più che all'organizzazione ma comunque soddisfacente.
Dopo una prima frazione dura a nuoto, dovuta alla forte corrente presente in acqua, sono stati affrontati i 20 km con il cuore in gola per andare a recuperare i 3 compagni di squadra avvantaggiati di circa 50 secondi dopo la frazione natatoria. La rimonta è riuscita, arrivando al T2 compatti per fare una buona corsa, un 5000 a 3:40 circa, passo che personalmente rappresenta un primato in una gara affrontata a tutta dal primo metro fino all'ultimo.

Si è concluso un anno ricco di soddisfazioni e di sfide.
E' stato un anno fitto di gare e buoni risultati, sopratutto nella prima parte di stagione. Peccato per la seconda, in cui un pò di disattenzioni hanno portato a dei buoni ma non soddisfacenti risultati.
Nel complesso c'è da essere contenti di questo 2014, i miglioramenti rispetto ad anno scorso ci sono stati e sono stati netti!

Con il 2014 si conclude anche la mia avventura nell'EderaTriathlon, squadra dell'esordio nella triplice discplina. Ora si guarda avanti, nuove avventure e nuovi obiettivi sono all'orizzonte!

mercoledì 24 settembre 2014

Triathlon Cesenatico

Domenica ci sarà il Triathlon di Cesenatico, ultimo appuntamento del Campionato Sociale per l'EderaTriathlonForlì.
Personalmente, andrò a caccia del rank anche sulla distanza olimpica, dopo che settimana scorsa ho completato il Rank Fitri 2014 per la specialità Sprint che si aggiunge a quella del Lungo conquistato attraverso Lido di Volano e Rimini Challange.
Ultima tappa di una stagione densa di impegni e buoni risultati, prima della Coppa Crono TT, fanalino di coda ma non meno importante.

Quindi..GAS a manetta!!!

martedì 23 settembre 2014

Gli esseri superiori

Spesso indichiamo come fratelli chi con noi ha in comune il cognome.
Quante volte succede che, con i fratelli di sangue, sia l'unica caretteristica che ci accomuna?
Fermiamoci invece un attimo a pensare a quante cose in comune abbiamo con gli altri umani:
abbiamo corpi strutturalmente identici, 5 sensi e solo 5, la capacità di amare, soffrire, piangere, odiare, fare del bene, fare del male, cadere in tentazione, ammalarsi, cadere, sbagliare, etc..
Vedete com'è lunga la lista?
Per motivazioni storiche, abbiamo invece differenze culturali, religiose, di usanze ma sono caratteristiche che ci portiamo dietro con gli anni, le esperienze di ognuno, le collocazioni geografiche. Differenze che, a mio avviso, andrebbero appiattite perché strumentalizzate..
Poi c'è che è specializzato maggiormente in alcune di queste piuttosto che in altre..ma noi potremmo essere delle altre persone se solo fossimo nati in condizioni (ambientali) diverse.

Ora, mi sembra evidente che siamo molto simili, diversi ma tremendamente simili.
Come possiamo allora discriminarci per il solo colore della pelle o per le sole tendenze sessuali?

Riflettevo che, ancora oggi, nel 2014, mentre ci consideriamo super grazie allo sviluppo tecnologico e intellettuale, le descriminazioni razziali e sessuali la fanno ancora da padrone all'interno della nostra società "avanzata".
Io mi vergogno un pò..