Soluzione senza codice: Visualizzare i giorni dall'ultima modifica di un elemento dell'elenco di SharePoint

Soluzione senza codice: Visualizzare i giorni dall'ultima modifica di un elemento dell'elenco di SharePoint

Importante :  Il presente articolo è stato tradotto automaticamente, vedere la dichiarazione di non responsabilità. Per visualizzare la versione inglese dell'articolo, fare clic qui.

29/9/2011 15.01

Di Justin Joyce, LANtek

Nota :  Questo articolo fa parte di una raccolta di post pubblicati in quattro anni sul blog Get the Point rivolto agli utenti finali di SharePoint.

Panoramica: report di aging personalizzati senza codice

Una delle parti funzionali più richieste di un sito di SharePoint è un report di aging per attività o elementi di elenco. In altre parole, quanti giorni/mesi sono passati dall'ultima volta in cui questo elemento di elenco è stato modificato?

A un primo sguardo, questa sembra una richiesta molto semplice. Dopo tutto, gli elementi creati e modificati sono associati a date specifiche e chiunque è in grado di memorizzare date personalizzate quando vengono apportate determinate modifiche agli elementi tramite ricevitori di elenchi. Esistono inoltre colonne calcolate in cui è possibile includere formule simili a quelle di Excel da usare con le informazioni. Può sembrare una questione piuttosto lineare. Si seleziona un campo data, si crea una colonna calcolata e quindi si crea una formula del tipo [DateField] - [Today]. Tuttavia, non è un'operazione così immediata. Come sa chiunque abbia provato questa "semplice" attività, se si usa qualcosa di simile a [Today] in una colonna calcolata, si verifica un problema. Se si prova a inserire [Today] nella casella della formula della colonna calcolata, si ottiene un messaggio di errore simile a questo:

Messaggio di errore

Qual è il motivo? Dipende dal modo in cui le colonne calcolate vengono effettivamente calcolate.

Ad esempio, si consideri una semplice formula come questa:

= IF( [Column1]<=[Column2], "OK", "NO")

La formula indica che se Column1 è minore o uguale a Column2, viene visualizzato OK. In caso contrario, viene visualizzato NO. Si tratta di una semplice formula abbastanza tipica per una colonna calcolata, che adotta un presupposto di base sull'elemento di elenco che contiene queste colonne: I valori di Column1 e Column2 non potranno mai cambiare senza un evento di di aggiornamento per l'elemento di elenco.

Questo è vero, perché le colonne calcolate vengono ricalcolate solo quando l'elenco viene aggiornato (o creato), in quanto presuppongono che le informazioni calcolate sono contenute nell'elemento stesso. Di conseguenza, si crea un problema quando si prova a usare un valore che cambia indipendentemente dai campi dell'elemento, ad esempio la data odierna.

Questo è il modo in cui funzionano le colonne calcolate e si suppone che lo scopo di questo comportamento siano le prestazioni. Supponendo un elenco di diverse migliaia di elementi, ognuno dei quali contiene una colonna calcolata per la quale è necessario un aggiornamento in tempo reale, un meccanismo, ad esempio un processo timer, dovrebbe eseguire regolarmente l'iterazione di ogni elemento che contiene la colonna calcolata e aggiornarne il valore. Questo potrebbe essere estremamente dispendioso in termini di prestazioni, perché nelle distribuzioni di dimensioni maggiori il processo potrebbe essere eseguito e comportare modifiche continuamente. Questa sembra quindi la spiegazione più logica.

Alcuni suggerimenti per soluzioni simili comportano la capacità di fare in modo che SharePoint accetti un valore di data odierna creando per prima cosa una colonna denominata Today, quindi aggiungendola alla formula e infine eliminandola. Si tratta di soluzioni valide, ma è bene ricordare cosa è stato detto riguardo all'aggiornamento delle colonne calcolate. Questo valore viene modificato solo quando viene aggiornato l'elemento e questo significa che i valori risulteranno presto non corretti, in particolare nel caso di un calcolo di giorni.

Altri adottano la soluzione di usare JavaScript per scrivere i valori nella pagina. Anche questa soluzione funziona, ma è meglio evitare categoricamente uno script client quando è possibile.

Implementazione:

Che fare? Le colonne calcolate sono da evitare per funzioni cosiddette "volatili" come Today. Per gestire questo aspetto, si potrebbe sviluppare codice personalizzato, come una colonna calcolata, un processo timer o un processo pianificato, che potrebbero aggiornare ogni singolo elemento per cui è necessaria l'esecuzione di questo calcolo. Questo approccio ripropone tuttavia il problema delle prestazioni posto nell'ultimo paragrafo ed è inoltre una soluzione poco efficace e altamente specifica per il sito/elenco/colonna in questione. Oltre a questi due problemi, sarebbe inoltre necessaria una persona molto competente, che sappia come creare il codice e che sviluppi questa soluzione. C'è un'alternativa più semplice!

Chi ha i diritti necessari per creare campi e modificare le pagine nel sito e ha una certa competenza in XSLT e nella creazione di visualizzazioni può creare un modello XSL, che può essere incluso in una visualizzazione elenco e calcolare fedelmente il valore ogni volta che la pagina viene richiesta. Questo scenario elimina le preoccupazioni riguardo alle prestazioni e non richiede lo sviluppo e la distribuzione di codice personalizzato tramite una soluzione.

Perfetto. Come si fa?

  1. Creare o selezionare il campo che fungerà da origine. Deve essere un campo di tipo data.

  2. Creare il campo che fungerà da segnaposto per il valore calcolato.

  3. Aggiungere entrambi i campi a un tipo di contenuto e aggiungere quest'ultimo a un elenco.

  4. Creare una visualizzazione dell'elenco che contenga le colonne di origine e segnaposto.

  5. Caricare il modello XSL nella raccolta stili.

  6. Impostare la proprietà "Collegamento XSL" per la web part della visualizzazione elenco tramite l'interfaccia utente.

  7. Ecco fatto!

Di seguito viene descritto un caso d'uso di esempio e la procedura dettagliata per l'implementazione. Un cliente ha bisogno di una visualizzazione del proprio elenco principale che indichi per quanto tempo un elemento di elenco specifico ha mantenuto il suo stato. L'elenco contiene un tipo di contenuto del sito personalizzato, derivato dal tipo Elemento e aggiunto all'elenco. È già stato definito un ricevitore di eventi che acquisisce tutti i momenti in cui viene modificato il campo di stato nell'elemento dell'elenco e in cui viene salvato in una colonna chiamata "Date Status Changed". Questo approccio complesso non è necessario ed è possibile ottenere lo stesso risultato con QUALSIASI campo data. Non è necessario seguire questa implementazione, ma è possibile sperimentare altre alternative. Il minimo necessario è l'aggiunta all'elenco del campo data di origine e del campo segnaposto (altre informazioni su questo aspetto nel prossimo paragrafo) necessari per il calcolo, anche se è consigliabile usare colonne del sito e tipi di contenuto del sito se si vuole riutilizzare questa soluzione in altri punti del sito.

Ora che è stata definita la data di origine da usare nel calcolo rispetto alla data odierna, è possibile creare una colonna del sito personalizzata da usare come contenitore per il valore calcolato. In questo esempio si è scelto di usare una colonna calcolata perché non potrà essere modificata nei moduli di creazione o modifica degli elementi, ma può essere selezionata per apparire nelle visualizzazioni, in quanto gli utenti non devono poter immettere valori arbitrari in questa colonna. Se non apparisse nelle visualizzazioni, potrebbe creare confusione.

Una volta definita la colonna del sito, è possibile aggiungerla ai tipi di contenuto che verranno usati nell'elenco. È quindi necessario creare la visualizzazione che verrà successivamente personalizzata con XSLT. Assicurarsi di creare una visualizzazione standard contenente la colonna di date di origine e la nuova colonna calcolata che fungerà da segnaposto per il valore calcolato.

A questo punto sono stati definiti tutti gli elementi necessari per supportare il report di aging personalizzato. Non resta che creare il modello XSL, caricarlo nella raccolta stili del sito e collegarlo alla visualizzazione elenco. Il modello XSL usato conterrà una parte di markup normale generato da SharePoint per la creazione della visualizzazione, nonché il markup personalizzato usato per eseguire l'override di certe parti e calcolare automaticamente il valore desiderato.

Riconoscimento dovuto, i modelli XSL per eseguire calcoli effettivi se si usa per questa soluzione sono generosamente forniti da "swirch" nei forum MSDN:
http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Scaricare il foglio di stile XSL (aging.zip), disponibile qui:
https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9!104

Dopo averlo aperto nell'editor di testo preferito, sarà possibile notare molto markup XSL normale di SharePoint per il rendering delle visualizzazioni. Continuando a scorrere fino alla riga 357, si potrà notare l'inizio dei modelli personalizzati aggiunti al markup, il primo dei quali è il modello "DateDiff", seguito da "calculate-julian-day" e “FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status". Questi sono i tre modelli che creeranno e mostreranno i calcoli nelle visualizzazioni. Se si vuole usare nomi di campo diversi rispetto a quelli specificati sopra in questo articolo, è necessario scorrere i modelli e sostituire tutti i riferimenti agli altri nomi. Ricordare che a questo scopo sarà preferibile usare il nome INTERNO del campo invece del nome visualizzato.

Quando si è soddisfatti del modello e si è pronti a continuare, passare alla raccolta stili e caricarlo nella cartella "Fogli di stile XSL" e quindi copiare il collegamento al file. In questo modo, sarà possibile modificarlo facilmente in seguito o aggiungerlo ad altre parti del sito nel modo desiderato.

Passare quindi all'elenco e selezionare la visualizzazione creata in precedenza in questo articolo. Nel menu "Azioni sito" scegliere "Modifica pagina".

Comando Modifica pagina del menu Azioni sito

Trovare la web part della visualizzazione elenco nella pagina e aprire il menu Web part facendo clic sulla piccola freccia rivolta verso il basso nell'angolo in alto a destra. In questo menu scegliere "Modifica web part".

Comando Modifica web part del menu Web part

Verrà visualizzato il menu della web part sul lato destro della finestra del browser.

Menu web part

Fare clic sul segno + per la sezione "Vari" e individuare la proprietà "Collegamento XSL".

Proprietà Collegamento XSL nel menu Web part

Incollare nella raccolta stili il collegamento al file XSL copiato prima. Il collegamento può essere relativo o assoluto.

Collegamento al file XSL incollato

Fare clic su "OK" per salvare le modifiche e quindi sul pulsante "Interrompi modifica" nella scheda "Pagina" della barra multifunzione nella parte superiore della pagina.

Pulsante Interrompi modifica nella scheda Pagina

Se la configurazione è corretta, i numeri dovrebbero ora essere visualizzati nella colonna dei giorni di permanenza nello stato.

Colonna giorni in stato visualizzazione numero

Infine, ecco cosa succederebbe con alcuni dati di prova di date diverse:

Report di aging con visualizzati dati di test

Riepilogo:

Ecco qui: un metodo solido, con formattazione accurata e prestazioni migliori per creare un report di aging in SharePoint, completo di una semplice implementazione senza codice. Questo report può avere diverse possibili applicazioni oltre al caso d'uso esplorato in questo articolo. Un altro scenario comune per questo tipo di report consiste nel collegarlo a un elenco attività in modo da poter determinare immediatamente il tempo trascorso da quando è stata creata un'attività.

Buon divertimento!

--Justin

Justin Joyce, LANtek

Commenti

Passaggi mancanti
/10/2012 3.51
Ho seguito i passaggi, ma manca qualcosa. Come fa XSL a sapere quale data usare o il campo in cui aggiungere il numero di giorni trascorsi? Odio quando manca un passaggio.

Niente codice, va bene!
30/8/2012 12.12
Sono d'accordo, ma non credo che si possa davvero considerare una soluzione "senza codice".
La cosa interessante è che grazie a qualche falla di SharePoint ho una colonna calcolata che funziona con Today... non so in che modo o come mai, perché non riesco a riprodurre i passaggi, ma c'è e funziona.

Formula per la colonna calcolata dei giorni di permanenza nello stato
2/5/2012 7.39
Justin, che formula hai usato per la colonna calcolata del sito per i giorni di permanenza nello stato (colonna segnaposto)? Forse "=today"?

SharePoint 2007
2/12/2011 11.29
Non ho ancora provato ad applicare questa soluzione a SharePoint 2007, ma sto cercando di farlo. Sfortunatamente non esiste alcuna proprietà Collegamento XSL nella web part tramite l'interfaccia utente.

Gran bel post!
/11/2011 9.53
,
Gran bel post.
Sto usando SharePoint 2007.
Non trovo la sezione Vari indicata sopra.
Puoi indicarmi i passaggi per una configurazione con SP2007?
Grazie.

R: Soluzioni senza codice: Visualizzazione dei giorni trascorsi dall'ultima modifica apportata a un elenco di SharePoint
11/10/2011 8.24
Chris,
ottima scoperta!
Spero di poter dare un'occhiata al tuo post entro oggi per vedere se riesco a rendere questa soluzione più efficace.
Sono felice che il post ti sia piaciuto e che tu abbia trovato una soluzione al formato di data europeo. :)
-Justin

Soluzione per formati di data europeo
11/10/2011 6:45 AM
ad alta nuovamente Marco Tanara
per informazione, trovare una soluzione per il problema detto in precedenza in questa pagina.
https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

Formati di data europei
7/10/2011 3.59
Ciao Justin,
Grazie, questa è un'ottima soluzione, proprio quella che stavo cercando da due giorni! Ho però un piccolo problema per cui spero tu possa aiutarmi.
Ho modificato leggermente il tuo codice per calcolare il numero di giorni fino a quando succede un evento, invece che da quando, scambiando le variabili nell'ultima riga della funzione "DateDiff";

<xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of>

Però riesco a calcolare correttamente la differenza solo la metà delle volte. Quindi, ad esempio, con questa data (formato gg/mm/aaaa);

30/12/2011

Il calcolo è corretto, ma con la data (stesso formato)

12/10/2011

Il codice esegue il calcolo come se la data fosse 10-dic-2011 invece di 12-ott-2011.
Ho provato a cambiare semplicemente la posizione dei valori di giorno e mese nella variabile "JulianStartDate" così;

<xsl:with-param name="Month" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'),7,2)"/>
<xsl:with-param name="Day" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'),5,2)"/>

E sono riuscito a correggere il problema con la seconda data, ma il calcolo ha dato un risultato sbagliato per la prima!
Ho anche provato a modificare le chiamate di FormatDateTime in modo da usare LCID europei e diverse modifiche all'ultimo parametro FormatDateTime (ad esempio, ddMMaaaa o MMddaaaa) con le regolazioni appropriate ai parametri posizionali della sottostringa, ma senza successo.
Apprezzerei davvero qualsiasi consiglio al riguardo.
Grazie,
Chris

Nessun codice
/9/2011 4.27
Non credo che XSL si qualifichi come soluzione "senza codice", visto che la comprensione del linguaggio XSL non è immediata, ma è vero che non comporta attività di programmazione. A parte questo, ottima soluzione, grazie!

Nota : Dichiarazione di non responsabilità per la traduzione automatica: Il presente articolo è stato tradotto tramite un software di traduzione automatica e non da una persona. Microsoft offre le traduzioni automatiche per consentire a coloro che non conoscono la lingua inglese di leggere gli articoli sui prodotti, sui servizi e sulle tecnologie Microsoft. Dal momento che l'articolo è stato tradotto automaticamente, potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli.

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa al programma Office Insider

Queste informazioni sono risultate utili?

Grazie per i tuoi commenti e suggerimenti

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×