Posts

SharePoint 2007, 2013, Silverlight! ... "Non ce la faccio, troppi ricordi"

Image
Dopo una lunga pausa, ritrovo un po' di tempo per questo blog.. confesso decisamente lasciato solo... (Confesso che mi è anche capitato tra le mani per caso) Blogger. Non pensavo neppure fosse ancora utilizzato e chissà se qualcuno leggerà queste righe. Dovevo ancora abilitare l'https, per fortuna andato con un semplice flag. E, addirittura, mi avvisano che "mettiamo noi il banner per i cookies, ma tu controlla che ci sia: è una tua responsabilità". Che gentili! Però è bello riprendere in mano materiale "vintage". Ha il suo fascino e dà un senso di nostalgia. Quella piacevole sensazione che senti maneggiando oggetti antichi ai mercatini o in solaio, materiali di altri tempi, che tanto fanno pensare alle madeleine di Proust (citazione classica, un must, per i post su ricordi e lacrimucce) o, più recente, ma neanche troppo (1997), a Giovanni Storti in auto, cantando e  piangendo "troppi ricordi, non ce la faccio". E la sensazione sarebbe molto più go...

SharePoint - Errore javascript nel file WebResource.axd

Image
Non so dire perché, né spiegarlo o trovare traccia del motivo per cui si presenta, ma ogni tanto, non su tutti i browser, non a tutti gli utenti, e neppure allo stesso utente nella stessa sessione di navigazione, però in pagine particolarmente personalizzate lato client (tramite jquery e javascript di varia forma), viene fuori un errore javascript 'Event' is undefined normalmente in una delle righe del file WebResource.axd. In alcune circostanze, non è neppure bloccante, in altre invece blocca l'esecuzione di altri javascript (soprattutto per browser datati, ad es IE7-8) Proviamo a risolvere o aggirare il problema. Eseguendo il debug di IE l'errore non si presenta. Il che dà conferma alla teoria che l'osservazione modifica lo stato (fisica in background), ma non ci aiuta. Entrando però in debug al momento dell'errore, ecco che abbiamo un'eccezione in questa funzione, dentro il WebResource.axd (riga 184 circa): function Menu_HideItems(items) {...

SharePoint 2013 - Issue su Document Set

Abbiamo sperimentato un paio di Issue sulla gestione dei Document Set su SharePoint 2013 (testati e riprodotti su SP Online). Ecco qui due promemoria per le prossime volte. Singolo Apice nel Nome del Document Set A differenza della gestione dei caratteri speciali NON permessi sui nomi dei file, per il Document Set abbiamo la restrizione solo per i seguenti caratteri: " # % * : < > ? / \ |. Quindi, apice singolo e & sono permessi nel nome del file. MA, utilizzando l'apice singolo, in creazione del Document Set non abbiamo problemi: visualizziamo la Welcome Page correttamente. Se usciamo dal Document Set, e proviamo a rientrarci, invece, abbiamo il comportamento della Cartella: nessuna welcome page... Se togliamo l'apice dal nome, in Modifica Proprietà, tutto torna alla normalità. Conclusione: controllate manualmente che NON sia presente l'apice singolo nel Nome del Document Set. Errore in Welcome Page per Lookup errate Creiamo un Content Typ...

SharePoint 2013 - Filtrare per Eventi Ricorrenti senza i duplicati

La creazione di un evento ricorrente genera tante istanze dell'evento creato, quante sono le date configurate per la ricorrenza. Esiste la possibilità di visualizzare tutti gli eventi, con le ricorrenze, tramite la vista Calendario e la vista Eventi Correnti. La vista Tutti gli Eventi mostra invece gli eventi ricorrenti "Parent", quindi i soli item effettivamente inseriti, con la regola di ricorrenza. Quando modifichiamo una istanza di una ricorrenza, possiamo decidere se modificare tutta la serie o il singolo elemento: scegliendo l'ultima opzione, viene creato un nuovo item (evento), con un suo id, con le stesse regole della ricorrenza, ma "slegato" dalla ricorrenza "Parent" originaria (pur mantenendo un collegamento interno). Se vogliamo visualizzare solo gli eventi "Parent" originali, senza gli eventi modificati a partire dalla serie (come descritto sopra), dobbiamo filtrare la web part modifiicando, tramite il Designer, la CAM...

SharePoint - Spostare Document Set di grandi dimensioni

Per lo spostamento di Document Set da una libreria ad un'altra occorre tenere conto del contesto in cui si implementa la procedura di spostamento, in particolare se esiste la possibilità che i Document Set contengano documenti di dimensioni superiori ai 10 Mb. Export/Import In rete è la soluzione più consigliata, ma  attenzione: per file di grandi dimensioni (superiori a 10Mb) , funziona solo nel caso di Event Receiver (o Console Application). Utilizzato in un Timer Job si riceve un errore decisamente incomprensibile, in fase di Export: " Unable to determine the identity of domain ". Questo messaggio ci ha fatto penare un bel po' ed è riferito ad una classe utilizzata dal package di gestione dello stream in fase di esportazione del Document Set (class IsolatedStorage). //get Document Set Source DocumentSet documentSet = DocumentSet.GetDocumentSet(itemToMove.Folder); //get Target List SPList targetList = web.Lists[docSetListTargetName]; //get content type i...

SharePoint - Il Check-Out e i Documenti Fantasma!

Image
Lo scenario spettrale nel quale i Documenti scompaiono alla vista di tutti, compreso il System Account, ha una spiegazione (quasi logica) e anche una soluzione! Il Cliente segnala l'impossibilità di salvare un nuovo Documento (nuovo), creato con Word, con un dato nome. L'utente X accede alla Document Library su cui è impostato check-in/out per modifica. Clicca su Nuovo Documento, apre Word, modifica il file e, per qualche ragione, NON esegue Check-in. Chiude Word, oppure si pianta (non raro), o il browser va in errore (ancora meno raro), o qualsiasi altro motivo per cui non viene archiviato il file. In questo scenario, gli altri utenti non vedono il documento. Nessuno. Solo l'utente X. L'utente Y crea un nuovo file e lo vuole salvare, chiamandolo come il file creato (e non archiviato) dall'utente X. MA riceve un messaggio: Non è possibile salvare il file perché l'utente X sta già modificando un documento con quel nome. Il sistema dice che c'è que...

SharePoint - Usare Information Management Policy per l'invio di Notifiche di Scadenza

Image
Definiamo un campo di tipo Date Time per immagazzinare il giorno per l’invio dell’alert, ad es “AlertDate” Definire da SharePoint Designer, un Workflow, in creazione/modifica, denominato “Set Alert Date” che aggiorna il campo AlertDate con la scadenza desiderata. Ad es, si vuole essere avvisati 7 giorni prima della scadenza (EndDate)? Impostiamo AlerDate = EndDate – 8 giorni (poi vediamo perché 8 e non 7) Definire un secondo Workflow, senza nessuna spunta (no manuale, no automatico) così non verrà visto da nessuno, se non l’admin Chiamiamolo “Send Alert For End Date” Il Worflow invia una mail ai destinatari da avvisare. Eventualmente, possiamo fare in modo, dopo l'invio, di impostare AlertDate = AlertDate+1 (se AlertDate < EndDate), così da inviare mail anche nei giorni successivi fino alla scadenza. Ora, navigare sulla lista/library interessata dall’alert ed entrare in List Settings > Information Management Policy. Definiamo una Policy per l’Expira...

SharePoint 2010 - Target Audience non funzionante? Un semplice flag che risolve..

Image
Diventare matti per la funzionalità di Target Audience su web part, navigation... Il problema è che la Target Audience è correttamente configurata in ogni sua parte, vedo la possibilità di usarla ovunque, nella navigazione, ad esempio. Inserisco un Gruppo di SharePoint, salvo e verifico.. Verifico che non funziona e continua ad ignorare i miei settings. Da Site Collection Administration, tutte le configurazioni erano corrette. Allora ci siamo spostati sulla Central Administration, e abbiamo verificato che lo User Profile Service funzionasse correttamente. Siamo andati in Application Management > Manage Web Applications, selezioniamo la Web Application in cui non funziona la Target Audience e clicchiamo su Service Connections. Abbiamo trovato che era impostata a [custom], ma soprattutto che il check su User Profile Service Application era a false... Lo abbiamo messo a true, flaggandolo. Poi, andiamo in Application Management > Manager Service Applications e clic...

SharePoint 2007 - Modificare il Subject delle mail di Notifica/Alert con proprietà dell'item con AlertTemplate.xml

Il Cliente chiede di modificare il Subject delle mail di Alert che vengono inviate alla modifica di item di lista, in particolare di Task list personalizzate. La modifica dei template è "semplice", secondo quanto si legge in giro, ma non è per nulla ben documentata. In particolare per l'utilizzo di campi dell'item da utilizzare al di fuori del corpo della mail. Per modificare il template, occorre andare sul server nella cartella C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML. Eseguire una copia del file alerttemplates.xml : questo XML definisce tutti i template delle mail inviate alla sottoscrizione del servizio di Alert di liste e library. Creare un nuovo file XML con un nome diverso, ad es, custom_alerttemplates.xml . Nota : non modificate il file originale, ma solo questo. Ora, apriamo il nuovo XML e cerchiamo il template da modificare, nel nostro caso devo cercare il blocco: <AlertTemplate Type="List...

SharePoint - Check People Picker con jQuery

Se si vuol controllare il valore inserito in un People Picker utilizzando jQuery, facciamo così! Controllando l'HTML source della pagina, vediamo che al People Picker corrispondono molto elementi, ma quando l'utente scrive il nome per inserire l'utente, non scrive in un input o in una textarea, ma... in un DIV con l'attributo contentEditable = true. Possiamo quindi controllare il dato in un New/Edit form prima di salvare l'item tramite la funzione js PreSaveAction(). Prima di tutto, creiamo un custom form (new o edit) e cerchiamo la riga corrispondente alla colonna People da controllare. Nell'HTML, individuiamo la TD che contiene il controllo SharePoint e aggiungiamo all'attributo "class" un nome che ci aiuterà ad identificare il campo desiderato (ad es "check-this-pp"). Se abbiamo da controllare più People Picker, usiamo classi diverse. Ora, aggiungiamo i riferimenti a jQuery e il codice seguente, in fondo alla pagina: functio...

SharePoint - Check File Name in Upload form in Document Library con Javascript

Image
Se si desidera controllare il nome del file di un nuovo documento in un Upload form, possiamo farlo con del buon Javascript ! Ho creato una funzione che controlla il nome del file e poi disattiva il bottone OK se la condizione non è verificata Ho eseguito un override della funzione CheckAssetLibMediaExtension sull'evento "onchange" del controllo input file nel file Upload.aspx. Se vediamo il codice HTML del file Upload.aspx (da browser), troviamo: <input name="ctl00$PlaceHolderMain$UploadDocumentSection$ctl05$InputFile" type="file" id="ctl00_PlaceHolderMain_UploadDocumentSection_ctl05_InputFile" class="ms-fileinput ms-fullWidth" size="35" onfocus="ResetSpFormOnSubmitCalled();"  onchange="CheckAssetLibMediaExtension()"  title="Scegliere un file" /> Cercando la funzione, troviamo: function CheckAssetLibMediaExtension() { } Così, possiamo farne l'override! Creiamo...

SharePoint - Check File Name in Upload form in Document Library with Javascript

Image
If you want to check file name of new document in Upload form, you can do with Javascript! I created a custom js that check filename then disables button OK if condition is not verified. I override the function CheckAssetLibMediaExtension on event "onchange" of input file control in Upload.aspx. If you see HTML Source of Upload.aspx (rendered by browser) you see: <input name="ctl00$PlaceHolderMain$UploadDocumentSection$ctl05$InputFile" type="file" id="ctl00_PlaceHolderMain_UploadDocumentSection_ctl05_InputFile" class="ms-fileinput ms-fullWidth" size="35" onfocus="ResetSpFormOnSubmitCalled();" onchange="CheckAssetLibMediaExtension()" title="Scegliere un file" /> Search for function in HTML Source, you find: function CheckAssetLibMediaExtension() { } So, you can override it! Create in masterpage reference to jQuery and add function below : function CheckAssetLibMediaEx...

SharePoint - Aggiungere un bottone Applica al form di Edit di un List Item per salvare senza chiudere il form

Questo articolo descrive come creare un bottone "Applica" in un edit form per un list item, in modo da salvare i dati e ricaricare il form stesso, senza essere reindirizzati alla lista (o al Source indicato nel querystring). Creare un edit form personalizzato con SharePoint Designer. Aprire in modifica il form. Creare un nuovo parametro di tipo QueryString per il Source, chiamiamolo Source: quando la pagine viene ricaricata dopo aver salvato i dati, l'url nel Source viene mantenuto (ad es, per essere reindirizzati correttamente quando si clicca su Salva o Annulla). Quindi, cercare nel codice i tag seguenti: <xsl:param name="dvt_apos">&apos;</xsl:param> <xsl:variable name="dvt_1_automode">0</xsl:variable> E aggiungere sotto il codice seguente: <xsl:param name="ListItemId">0</xsl:param> <xsl:param name="Source"></xsl:param> Cercare il bottone Salva (o Annulla) nell...

SharePoint - Add button Apply to List Item Edit Form for Saving Item without closing form

This post describes how to create an Apply button in list item edit form, to save data and reload form, without redirect to list (or Source). Create a custom edit form with SharePoint Designer. Open form in edit mode. Create new parameter of type QueryString for Source, named Source: when page refresh after saving data, url maintains Source (i.e. for redirect to list when you click on Save or Cancel). Then, search for this code <xsl:param name="dvt_apos">&apos;</xsl:param> <xsl:variable name="dvt_1_automode">0</xsl:variable> And add code below: <xsl:param name="ListItemId">0</xsl:param> <xsl:param name="Source"></xsl:param> Search for button save/cancel in xslt, find this code: <SharePoint:SaveButton runat="server" ControlMode="Edit" id="savebutton2"/> Add code below (the button): <input type="button" value="Applica...

Office365 / SharePoint 2013 - Modificare l'ordine dei link del menu contestuale (ECB)

Image
Se vi è capitato di utilizzare, da SharePoint Designer 2013, una Custom Action per aggiungere nel menu contestuale di un item un nuovo link (ad esempio verso una funzionalità custom o una form personalizzata), vi sarete accorti anche voi della difficoltà di inserire questo nuovo link in una posizione definita. Al contrario dei bottoni sul Ribbon, non possiamo utilizzare schemi per la posizione e il sequence numerico sembra non avere nessun effetto. Utilizzando la stessa funzione del mio post Office365 / SharePoint 2013 - Nascondere link del menu contestuale (ECB) , ho inserito un comando aggiuntivo per invertire ad esempio il link per Eliminare un Articolo, posizionandolo al terzo posto dell'item La funzione per la sostituzione è la seguente: function ExchangePositionWith(firstselector, secondselector) {     var other = $(secondselector);     var first = $(firstselector).after(other.clone());     other.after(first).remove...

Office365 / SharePoint 2013 - Nascondere link del menu contestuale (ECB)

Image
Utilizzando jQuery ho inserito in un javascript un comando per sostituire le funzioni richiamate dal clic sul Menu dell'item (i "..."). $("div.ms-list-itemLink").click(function(){   CoreInvoke('ShowECBMenuForTr', this, event);GestioneMenuItem(); return false;  });  $("a.ms-lstItmLinkAnchor").click(function(){   CoreInvoke('ShowECBMenuForTr', this, event);GestioneMenuItem(); return false;  }); Questi comandi aggiungono una funzione al metodo standard richiamato dal clic e che genera il menu contestuale dell'item. La funzione "iniettata" esegue un secondo comando dopo qualche ms, attendendo la creazione del menu. function GestioneMenuItem(){  setTimeout("DoGestioneMenuItem()",300); } La funzione responsabile della modifica del menu è la seguente e cerca gli elementi da nascondere tramite il titolo del link: function DoGestioneMenuItem(){  $("a[title='Elimina elemento']").parent().hide...

SharePoint 2010 - Convalida Colonna per caratteri speciali

Image
Eccovi una bella formula per validare il testo inserito in una List Column. La colonna non deve contenere caratteri speciali, ad esempio se questa viene usata per creare, tramite una procedura, un file o un Document Set. Modificare la colonna di lista e, espandere la sezione Convalida Colonna. Inserire il testo seguente nella formula: =AND(IF(ISERROR(FIND(",";Titolo));TRUE);IF(ISERROR(FIND("&";Titolo));TRUE);IF(ISERROR(FIND("!";Titolo));TRUE);IF(ISERROR(FIND("@";Titolo));TRUE);IF(ISERROR(FIND("~";Titolo));TRUE);IF(ISERROR(FIND("#";Titolo));TRUE);IF(ISERROR(FIND("$";Titolo));TRUE);IF(ISERROR(FIND("%";Titolo));TRUE);IF(ISERROR(FIND("^";Titolo));TRUE);IF(ISERROR(FIND("*";Titolo));TRUE);IF(ISERROR(FIND("(";Titolo));TRUE);IF(ISERROR(FIND(")";Titolo));TRUE);IF(ISERROR(FIND("-";Titolo));TRUE);IF(ISERROR(FIND("=";Titolo));TRUE);IF(ISERROR(FIN...

SharePoint 2010 - Simple Cascading Lookup with SPServices

Image
A new post on that excellent tool that is SPServices, the jQuery framework / EcmaScript for SharePoint! A simple scenario: we have two lists of data, for example, Countries and Companies for Countries, and a list which has two columns Lookup, Country and Company. We want to be able to use the first Lookup, Country, to filter second, Company, showing Companies for the selected Country. We create the list Nations, with only the Title field. Now let's create Companies with Title (Company Name) and Country (lookup list to the Nations). Now, let's create a list CustomList1 that has the two columns Country and Company, respectively lookup of Nations and Companies. We modify the NewForm.aspx and EditForm.aspx form by entering the following code, making sure to load the SiteAssets. Js file we need: jquery.SPServices-0.7.2.min.js ( download here ) jquery-1.8.2.min.js (tested with this version) Here's the code to insert in both forms (new and edit): <sc...

SharePoint 2010 - Semplice Cascading Lookup con SPServices

Image
Ancora un post su quell'ottimo strumento che è SPServices, il framework jQuery/Ecmascript per SharePoint! Uno scenario semplice: abbiamo due liste di anagrafiche, ad esempio, Nazioni e Aziende per Nazioni, e una lista che ha le due colonne Lookup, Nazione e Azienda. Vogliamo poter utilizzare la prima Lookup, Nazione, per filtrare la seconda, Azienda, per le sole Aziende per il Paese selezionato. Creiamo la lista Nazioni, con il solo campo Title. Ora creiamo la lista Aziende con Title (Nome Azienda) e Nazione (lookup verso la lista Nazioni). Ora, creiamo una lista CustomList1 che abbia le due colonne Nazione e Azienda, rispettivamente lookup di Nazioni e Aziende. Modifichiamo i form NewForm.aspx e EditForm.aspx, inserendo il codice che segue, avendo cura di caricare in SiteAssets i file .js di cui abbiamo bisogno: jquery.SPServices-0.7.2.min.js ( download qui ) jquery-1.8.2.min.js (testato con questa versione) Ecco il codice da inserire in entrambi i form (n...

SharePoint 2010 - Cambiare immagini e layout del Search Box

Image
Abbiamo avuto qualche difficoltà nel dover cambiare il layout, le immagini o il css del box di Ricerca in un Sito SharePoint. Il problema principale è nella modifica delle immagini: ad esempio, del bottone di ricerca, la lente di ingrandimento. In SharePoint, viene recuperata tramite il posizionamento di una immagine unica (fgpng.png), contenente tutte le icone, utilizzando le proprietà di Top, Left sull'immagine. Modificare questo png con tutte le icone non è consigliabile, perché cambierebbe su tutti i Siti della farm. Inoltre, la lente è proprio una immagine, definitia senza classe css, per cui non è possibile intervenire solo con il foglio di stile. Abbiamo trovato questa soluzione, un piccolo trucco, che ha funzionato egregiamente! Sovrascriviamo le classi che definiscono l'immagine del bottone di ricerca e definiamo la nuova immagine per il link del bottone: .ms-sbgo a  {    background-image:url("/_layouts/images/myboxsearch/lente.png");    ...