2009-05-18 39 views
10

Vorrei poter utilizzare la data odierna in una colonna calcolata in un elenco di SharePoint per, ad esempio, determinare se un'attività è in ritardo. Esiste un trucco ben documentato che comporta la creazione di una colonna fittizia denominata "Oggi", che la utilizza in una formula e quindi la elimina, quindi "ingannando" SharePoint nell'utilizzo della funzione Oggi.Qualsiasi soluzione al problema della colonna calcolata oggi è SharePoint?

Il problema è che questo metodo non funziona in modo affidabile: il calcolo non è dinamico; viene eseguito solo quando l'elemento viene salvato e pertanto la "colonna" Oggi diventa effettivamente la Data modificata. (Questo è probabilmente il motivo per cui SharePoint non ti consente di utilizzare la funzione Oggi in modo diretto.)

Qualcuno ha trovato una soluzione che funzioni? So che posso usare javascript per ottenere la data effettiva sul lato client e visualizzare colori, bandiere, qualunque cosa, ma sto cercando una soluzione "lato server".


Per riferimento, il trucco colonna di oggi ei suoi problemi sono descritti abbastanza bene in questi due post e commenti associati: http://blogs.msdn.com/cjohnson/archive/2006/03/16/552314.aspx e http://pathtosharepoint.wordpress.com/2008/08/14/calculated-columns-the-useless-today-trick/

risposta

4

Semplicemente non c'è un aggiramento per questo. Poiché i valori dell'elenco sono memorizzati nel database e restituiti "così come sono" ad altri featur come il crawler di ricerca, non è possibile creare un campo dinamico.

È possibile creare un campo personalizzato che visualizzerà il valore utilizzando la data odierna nel suo calcolo.

+0

Se futuri lettori stanno prendendo in considerazione la codifica di un Oggi Calcolato Colonna, si potrebbe voler leggere le mie esperienze di provare a fare esattamente questo: http://blog.pentalogic.net/2011/08/how-not-to-develop-a-sharepointtoday-calculated-column/ –

0

Il mio consiglio è quello di creare il tuo sul campo che fa questo calcolo per tu e poi fai riferimento ad esso nel tuo elenco di SharePoint. Non una semplice implementazione ma funzionerebbe.

0

Anche io ho cercato una soluzione, ancora senza fortuna .. Il trucco della colonna Oggi ha il limite di non essere dinamico.

Tuttavia, io ho un suggerimento, perché non creiamo un processo timer che aggiornerà una certa determinata colonna con la data corrente ogni giorno alle 12:00. So che alcuni di voi potrebbero pensare che sia un problema. Solo il mio suggerimento: D !!

0

Mi è venuta una soluzione molto approssimativa ma funzionante a questo problema senza dover fare alcuna codifica. Spiegherò sia come ho realizzato la colonna di oggi, sia come ho lavorato in una colonna in ritardo, perché quella colonna era un problema per scoprire come fare.

Innanzitutto, ho creato una colonna denominata "oggi" (sussulto!). Successivamente ho creato una colonna denominata "Days Overdue". Ho quindi aperto lo sharepoint designer e creato un nuovo flusso di lavoro. L'ho impostato per essere eseguito ogni volta che un articolo viene modificato/aggiornato (tieni presente che ho disattivato il controllo delle versioni per questo elenco, altrimenti avrei dovuto ricorrere alla codifica per evitare un mucchio di dati inutili che si accumulavano sul nostro server). Ho impostato le azioni per memorizzare semplicemente la data modificata in una variabile del flusso di lavoro, quindi modificare il valore della colonna odierna in quella variabile. anche se la colonna modificata è una data/ora e la mia colonna di oggi è solo una data, trasferisce bene. Quindi ho impostato il flusso di lavoro in pausa per 2 ore. puoi impostarlo su qualsiasi quantità di tempo vuoi ovviamente, cambierà solo l'ultimo tempo possibile per la tua colonna di oggi da aggiornare, cioè 2AM nel mio caso.

sulla colonna scaduta giorni. questo è il codice per quel ragazzo -

=IF([Due Date]>Today,"None",IF([Date Closed]=0,Today-[Due Date],IF([Due Date]>[Date Closed],"None",IF(Today>=[Date Closed],[Date Closed]-[Due Date],IF([Due Date]<Today,Today-[Due Date]))))) 

Questo mostra i giorni di ritardo in forma il numero di giorni, o se la sua non è in ritardo, mostra "Nessuno".È possibile utilizzare un formato numerico o un formato stringa, ma NON UN FORMATO DATA. Bene, spero che questo aiuti chiunque stia incontrando questo problema e non voglia di scavare nella codifica.

MODIFICA: Ho dimenticato di dire che nel codice sopra per la colonna dei giorni scaduti, ho inserito che se oggi è scaduta la data, per utilizzare la data chiusa meno la data di scadenza anziché la data di scadenza meno oggi, a assicurarsi che il calcolo continui a verificarsi dopo che un articolo è stato chiuso. probabilmente lo avresti notato nel codice, ma ho sentito che dovrei indicarlo per ogni evenienza.

MODIFICA 2: il codice che avevo prima della mia seconda modifica per la colonna calcolata non calcolava i giorni scaduti correttamente dopo che un problema era stato contrassegnato come "chiuso". Ho inserito il codice aggiornato. L'ultima parte del codice non ha senso, poiché è la stessa logica dell'inizio, ma ha funzionato in modo tale che non volevo correre rischi! :)

Pace.

+0

Come sarebbe questo aggiornamento? Giorni scaduti 'se l'oggetto non fosse stato modificato per, diciamo una settimana? Mi sto perdendo qualcosa? – Ryan

+0

il mio male, ho impostato il flusso di lavoro per modificare una colonna fittizia dopo aver atteso le 2 ore, per poi riaccendersi. –

+0

Questo è un po 'vecchio, ma potresti per favore darmi un passaggio per questa parte: "Ho impostato le azioni per memorizzare semplicemente la data modificata in una variabile del flusso di lavoro, quindi cambiare il valore della colonna di oggi in quella variabile. la colonna modificata è una data/ora e la mia colonna di oggi è solo una data, trasferisce bene, quindi ho impostato il flusso di lavoro in pausa per 2 ore, è possibile impostarlo su qualsiasi intervallo di tempo desiderato, ovviamente cambierà l'ultimo tempo possibile per la tua colonna di oggi da aggiornare, ovvero 2AM nel mio caso. " – tehman

4

Oltre a Christophe (PathToSharePoint) s 'articolo questo riguarda anche il trucco oggi e perché non funziona

The Truth about using Today in calculated columns

ci sono un certo numero di fudges, probabilmente il migliore è console di Dessie applicazione (di cui sopra da MNM)

Dynamically updating a SharePoint calculated column containing a Today reference

La sua buona, ma la sua non perfetta, per esempio potrebbe essere necessario preoccuparsi di fusi orari diversi.

Prima di proseguire su questa rotta dovresti chiederti se davvero, davvero devi farlo. Ad esempio: -

  • Se si desidera un countdown (days overdue/days left to complete a task) quindi è possibile utilizzare SPD e un XLST web part Visualizzazione dati

  • Se si desidera, al fine di mostrare gli elementi scaduti o elementi creati negli ultimi X giorni ec allora è possibile usare [Oggi] in un filtro di vista 2

-1

Ecco una soluzione:

Creare una colonna di data chiamato oggi. Utilizzare questa colonna nella formula calcolata (ignorare il fatto che la formula restituisce un valore errato). Dopo aver terminato con la formula, elimina la colonna Oggi dal tuo elenco.

Per qualche motivo funziona in questo modo! Ora Sharepoint tratta l'oggi nella tua formula come data odierna.

Nota: se si decide di modificare la formula, è necessario creare nuovamente la colonna Oggi. Altrimenti, non riconoscerebbe Oggi come colonna valida.

-1

Ho provato l'approccio di @ Farzad e sembra che funzioni perfettamente. Volevo fare un conteggio personalizzato su Giorni trascorsi quindi ho aggiunto una colonna calcolata che in precedenza stavo utilizzando una differenza tra Data di creazione e Colonne Data modificata, che veniva visualizzata solo ogni volta che un utente aggiornava il post, molto con mio sgomento

Ora ho una formula che funziona come vorrei e utilizza la colonna Oggi, ed è qui per chiunque desideri utilizzarla. Ho anche una colonna Stato sulla base della quale viene utilizzata una base di attesa e la formula rimanente si basa sulla differenza di data di Oggi - Creato.

=IF(Status="On Hold","On Hold",IF(AND(Today=Created,(DATEDIF(Created,Today,"D")=0)),"New",IF(AND(Today<>Created,(DATEDIF(Created,Today,"D")=0)),"New (updated)",IF(DATEDIF(Created,Today,"d")>3,"Need Update Immediately",IF(DATEDIF(Created,Today,"d")=1,"One day old",IF(DATEDIF(Created,Today,"d")=2,"Two days old","")))))) 

Fondamentalmente il suo solo un mucchio di nidificate IF condizioni che mi ottengono etichette sulla base dei quali posso aggiungere un gruppo a mio punto di vista e filtrare i dati, se necessario. Spero che questo aiuti chiunque cerchi una risposta!

1

Se si crea una colonna Oggi, è necessario aggiornarla. Puoi farlo sia con un lavoro con timer o inserendo uno script jquery su una pagina che viene colpita dall'utente. Lo script potrebbe chiamare SPServices.SPUpdateMultipleListItems per fare l'aggiornamento. Passa una clausola CAML in modo tale da aggiornare solo gli elementi dell'elenco in cui il valore Today deve essere aggiornato, ad es. una volta al giorno.

+0

Vorrei suggerire di creare un programma batch per ottenerlo, lasciarlo eseguire giornalmente e il programma aggiornerà solo la data che non è uguale alla data di oggi. Ma mi piacerebbe vedere la sceneggiatura come ciò che hai menzionato. Grazie in anticipo. – mutanic

0

Ho usato il seguente e non ho avuto problemi.

Nome campo: Scaduti Tipo

campo: Calcolato

Tipo

dati restituiti: Sì/No

Formula: =AND([Due Date]<NOW(),Status<>"Completed",[Due Date]<>"")

+0

Funziona bene, grazie. – Renan

+0

Non funziona: non verrà aggiornato a meno che il record non venga aggiornato. Controlla di nuovo domani e vedrai. – Ryan

Problemi correlati