2009-05-18 3 views
10

Ich würde gerne in der Lage sein, das heutige Datum in einer berechneten Spalte in einer SharePoint-Liste zu verwenden, um beispielsweise zu bestimmen, ob eine Aufgabe überfällig ist. Es gibt einen gut dokumentierten Trick, bei dem eine Dummy-Spalte mit dem Namen "Today" erstellt, in einer Formel verwendet und dann gelöscht wird, wodurch SharePoint in die Verwendung der Today-Funktion "ausgelaugt" wird.Eine Lösung für das Problem "Heute berechnete Spalte" ist SharePoint?

Das Problem ist, dass diese Methode nicht zuverlässig funktioniert - die Berechnung ist nicht dynamisch; Es wird nur erstellt, wenn der Artikel gespeichert wird, und daher wird die Heute-Spalte effektiv zum Änderungsdatum. (Dies ist wahrscheinlich der Grund, warum SharePoint Ihnen die Today-Funktion nicht direkt erlaubt.)

Hat jemand eine Lösung gefunden, die funktioniert? Ich weiß, dass ich Javascript verwenden kann, um das tatsächliche Datum auf der Klientenseite zu erhalten und Farben, Markierungsfahnen, was auch immer anzuzeigen, aber ich suche nach einer "Serverseite" Lösung.


Als Referenz sind die heute Spalte Trick und seine Probleme an diesen beiden Stellen und die damit verbundenen Kommentare recht gut beschrieben: http://blogs.msdn.com/cjohnson/archive/2006/03/16/552314.aspx und http://pathtosharepoint.wordpress.com/2008/08/14/calculated-columns-the-useless-today-trick/

Antwort

4

Es gibt einfach keine Arbeit dafür. Da die Werte für die Liste in der Datenbank gespeichert und "unverändert" an andere Objekte wie den Such-Crawler zurückgegeben werden, kann kein dynamisches Feld erstellt werden.

Es ist möglich, ein benutzerdefiniertes Feld zu erstellen, das den Wert mit dem heutigen Datum in seiner Berechnung anzeigt.

+0

Wenn zukünftige Leser Codierung eines heute Berechnete Spalte unter Berücksichtigung Sie Vielleicht möchten Sie über meine Erfahrungen zu versuchen, genau das zu tun: http://blog.pentalogic.net/2011/08/how-not-to-develop-a-sharepointtoday-calculated-column/ –

0

Mein Rat ist, Ihre auf dem Feld zu erstellen, die diese Berechnung funktioniert für Sie und dann verweisen Sie es in Ihrer SharePoint-Liste. Keine einfache Implementierung, aber es würde funktionieren.

0

Ich habe nach einer Lösung gesucht, immer noch kein Glück .. Der Today-Spaltentrick hat die Einschränkung, nicht dynamisch zu sein.

Ich habe jedoch einen Vorschlag, warum wir nicht einen Timer-Job erstellen, der eine bestimmte Spalte mit dem aktuellen Datum jeden Tag um 12 Uhr morgens aktualisiert. Ich weiß, dass einige von euch vielleicht denken, es sei ein Überkopf. Nur mein Vorschlag: D !!

0

Ich kam zu einer sehr groben, aber funktionierenden Lösung für dieses Problem, ohne eine Codierung vornehmen zu müssen. Ich werde erklären, wie ich die heutige Kolumne gemacht habe und wie ich das in eine überfällige Kolumne gebracht habe, weil diese Kolumne ein Schmerz war, um herauszufinden, wie es auch geht.

Zuerst machte ich eine Spalte mit dem Namen "heute" (keuchen!). Als nächstes habe ich eine Kolumne namens "Days Overdue" gemacht. Ich habe dann den Sharepoint Designer geöffnet und einen neuen Workflow erstellt. Ich stelle es so ein, dass es jedes Mal ausgeführt wird, wenn ein Artikel bearbeitet/aktualisiert wird (beachte, dass ich die Versionierung für diese Liste deaktiviert habe, sonst hätte ich auf Coding zurückgreifen müssen, um unnötige Daten auf unserem Server zu vermeiden). Ich setze die Aktionen so, dass das geänderte Datum einfach in einer Arbeitsablaufvariable gespeichert wird, und ändere dann den Wert der heutigen Spalte in diese Variable. obwohl die modifizierte Spalte ein Datum/eine Zeit ist und meine heutige Spalte nur ein Datum ist, wird es gut übertragen. Ich habe dann den Workflow für 2 Stunden pausiert. Sie können dies auf jeden gewünschten Zeitraum einstellen, es wird nur die späteste mögliche Zeit für Ihre heutige Spalte ändern, d. h. 2 Uhr in meinem Fall.

auf die Tage überfällig Spalte. Dies ist der Code für diesen Typen -

=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]))))) 

Dies zeigt die Tage überfällig in Zahlenform in Tagen oder wenn die nicht überfällig, es zeigt „None“.Sie können entweder ein Zahlenformat oder ein Zeichenfolgenformat, aber kein Datumsformat verwenden. Nun, ich hoffe, dass dies jedem hilft, der auf dieses Problem stößt und nicht in die Codierung eintauchen möchte.

EDIT: Ich vergaß zu sagen, dass in dem Code oben für die Tage überfällig Spalte, ich setze, wenn heute nach dem Datum geschlossen ist, um das Datum geschlossen minus das Fälligkeitsdatum anstelle von heute minus Fälligkeitsdatum zu verwenden Stellen Sie sicher, dass die Berechnung nicht fortgesetzt wird, nachdem ein Artikel geschlossen wurde. Du hättest das wahrscheinlich im Code bemerkt, aber ich fühlte, dass ich es nur für den Fall aufzeigen sollte.

EDIT 2: Der Code, den ich vor meiner 2. Bearbeitung für meine berechnete Spalte hatte, berechnete die Tage nicht überfällig, nachdem ein Problem als "geschlossen" markiert wurde. Ich habe den aktualisierten Code eingegeben. Der letzte Teil des Codes macht keinen Sinn, da es die gleiche Logik wie der Anfang ist, aber es hat funktioniert, also wollte ich kein Risiko eingehen! :)

Frieden.

+0

Wie würde dieses Update ' Tage überfällig 'wenn der Artikel nicht für, sagen wir, eine Woche geändert wurde? Fehle ich etwas? – Ryan

+0

Mein Problem, ich setze den Workflow, um eine Dummy-Spalte zu modifizieren, nachdem ich die 2 Stunden gewartet habe, und mich selbst wieder eingeschaltet habe. –

+0

Das ist etwas alt, aber könnten Sie mir bitte Schritt für Schritt für diesen Teil geben: "Ich habe die Aktionen so eingerichtet, dass das geänderte Datum einfach in einer Arbeitsablaufvariable gespeichert wird und dann der Wert der heutigen Spalte in diese Variable geändert wird Die modifizierte Spalte ist ein Datum/Uhrzeit und meine heutige Spalte ist nur ein Datum, es überträgt sich gut. Ich habe dann den Workflow für 2 Stunden pausieren. Sie können dies auf jeden gewünschten Zeitraum einstellen, es wird sich nur ändern die spätest mögliche Zeit für deine heutige Spalte zu aktualisieren, dh 2 Uhr in meinem Fall. " – tehman

4

Neben Christophe (PathToSharePoint) 's Artikel umfasst dies auch den heute Trick und warum es nicht funktioniert

The Truth about using Today in calculated columns

Es gibt eine Reihe von frisiert ist, wahrscheinlich die beste Dessie Konsole ist app (oben von MNM erwähnt)

Dynamically updating a SharePoint calculated column containing a Today reference

seine gut, aber es ist nicht perfekt, zum Beispiel müssen Sie über verschiedene Zeitzonen sorgen kann.

Bevor Sie diesen Weg gehen, sollten Sie sich fragen, ob Sie das wirklich, wirklich tun müssen. Zum Beispiel: -

  • Wenn Sie ein countdown (days overdue/days left to complete a task) dann können Sie SPD und eine Web-XLST Datenansicht Teil

  • verwenden Wenn Sie eine Ansicht wollen überfällige Posten oder Gegenstände in den letzten X Tagen erstellt zu zeigen, ec dann können Sie [Heute] in Aussicht Filter verwenden, ist 2

-1

hier eine Abhilfe:

ein Datum Spalte Heute genannt erstellen. Verwenden Sie diese Spalte in Ihrer berechneten Formel (ignorieren Sie die Tatsache, dass die Formel einen falschen Wert zurückgibt). Wenn Sie mit der Formel fertig sind, löschen Sie die Spalte Today aus Ihrer Liste.

Aus irgendeinem Grund funktioniert es so! Jetzt behandelt Sharepoint das Heute in Ihrer Formel als das heutige Datum.

Hinweis: Wenn Sie die Formel ändern möchten, müssen Sie die Spalte Heute erneut erstellen. Sonst würde es Heute als gültige Spalte nicht erkennen.

-1

Ich versuchte @ Farzad Ansatz und es scheint perfekt zu funktionieren. Ich wollte eine benutzerdefinierte Zählung auf Days Elapsed so hinzugefügt eine berechnete Spalte, die ich zuvor einen Unterschied zwischen dem Erstelldatum und modifizierten Datum Spalten, die nur angezeigt wurde, wenn ein Benutzer den Beitrag aktualisiert, viel zu meiner Bestürzung.

Ich habe jetzt eine Formel, die funktioniert, wie ich möchte und verwendet die Heute Spalte, und hier ist es für jeden, der es verwenden möchte. Ich habe auch eine Statusspalte, auf deren Grundlage eine Basis von "in der Warteschleife" verwendet wird, und die verbleibende Formel basiert auf der Datumsdifferenz von Heute - Erstellt.

=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","")))))) 

Grundsätzlich müssen nur ein Haufen von verschachtelten IF Bedingungen, die mir Etiketten auf der Basis bekommen, von denen ich eine Gruppe meiner Ansicht hinzufügen und Daten herauszufiltern, wenn nötig. Hoffe das hilft jedem auf der Suche nach einer Antwort!

1

Wenn Sie eine Today-Spalte erstellen, muss sie aktualisiert werden. Sie können dies entweder mit einem Zeitgeberauftrag tun oder indem Sie ein jquery-Skript auf einer Seite platzieren, die vom Benutzer getroffen wird. Das Skript könnte SPServices.SPUpdateMultipleListItems aufrufen, um das Update durchzuführen. Übergeben Sie eine CAML-Klausel, sodass Sie nur die Listenelemente aktualisieren, für die der Today-Wert aktualisiert werden muss, z. einmal am Tag.

+0

Ich würde vorschlagen, ein Batch-Programm zu erstellen, um dies zu erreichen, lassen Sie es täglich geplant laufen und das Programm wird nur die Daten aktualisieren, die nicht mit dem heutigen Datum übereinstimmen. Aber ich würde das Skriptbeispiel gerne als das sehen, was Sie erwähnen. Danke im Voraus. – mutanic

0

Ich habe das folgende verwendet und hatte keine Probleme.

Feldname: Überfällige

Feldtyp: Berechnet

Datentyp zurückgegeben: Ja/Nein

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

+0

Das funktioniert gut, danke. – Renan

+0

Funktioniert nicht - wird nur aktualisiert, wenn der Datensatz aktualisiert wird. Überprüfen Sie noch einmal morgen und Sie werden sehen. – Ryan