SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Automatische Aktualisierung von "HEUTE" Funktion unter calculated value

Unbeantwortet Dieser Beitrag hat 24 Antworten

Ohne Rang
14 Beiträge
MaximilianB erstellt 29 Apr. 2014 09:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

ich habe ein kleines Problem, welches in der englischsprachigen Community schon sehr ausführlich behandelt wurde. Ich frage trotzdem hier nochmal nach, da man sich in der Muttersprache gezielter auf das konkrete Problem beziehen kann.

Ich möchte in einer Liste für jedes Item (alle mit einer DEADLINE versehen) automatisch eine Ampel generieren, die den Status für dieses Item anzeigt.

Über ein "calculated value" lasse ich mir durch folgenden Code in einer Spalte RED, ORANGE oder GREEN anzeigen. Danach habe ich mit dem SharePoint Designer und der bedingten Formatierung durch hinterlegen einer entsprechenden Ampelgrafik mein Ziel auch eigentlich erreicht. Nur, wie die meisten hier sicher wissen, aktualisiert sich die TODAY (HEUTE) Funktion nicht automatisch. Gibt es hier einen simplen Trick zur Abhilfe?

Hier der Code für mein "calculated value":

=IF(duedate<=TODAY(),"RED",IF(duedate<=TODAY()+3,"ORANGE","GREEN"))

 

Viele Grüße und danke im Voraus

M

Alle Antworten

Ohne Rang
367 Beiträge
Tiac Als Antwort am 29 Apr. 2014 11:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

wir hatte das Problem auch schon mal, dass die Nutzung von TODAY bzw. HEUTE in einer berechneten Spalte nicht funktioniert hat.
Wir haben uns einfach eine Datumsspalte angelegt, bei der wir unter dem Standardwert "Heutiges Datum" markiert haben. Jetzt kannst du alles TODAY 's in deiner Formel durch die angelegte Spalte ersetzen. Vielleicht würde es aber auch ohne ändern der Formel klappen, wenn du die neu angelegte Datumsspalte einfach TODAY nennst. Du kannst das ja einfach mal probieren.

So haben wir jedenfalls das Thema HEUTE in einer berechneten Spalte gelöst. Hoffe das hilft dir weiter.

Grüße

Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 29 Apr. 2014 11:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

wird dieses Datum denn täglich aktualisiert, ohne dass man das Item manuell anfassen muss?

Ohne Rang
367 Beiträge
Tiac Als Antwort am 29 Apr. 2014 12:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Irgendwie wurde meine Änderungen in dem Beitrag nicht übernommen. Wenn du die Formel mit der neu erstellten Spalte angepasst hast, musst du diese Spalte wieder löschen. So sollte für die Zukunft, das aktuelle Datum genommen werden.

Versuch es mal, mit einem Datum was morgen dann den Status der Spalte ändern müsste, wenn das aktuelle Datum genommen wird.
Hoffe es klappt und sorry, dass ich nicht darauf geachtet habe das meine Änderungen in dem vorigen Beitrag auch übernommen werden.

Grüße 

Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 29 Apr. 2014 12:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

leider bin ich bei Ihrer Überlegung jetzt nicht mehr mitgekommen. Könnten Sie das vielleicht etwas näher erläutern?

Entschuldigen Sie die Unverständlichkeit.

Ohne Rang
367 Beiträge
Tiac Als Antwort am 29 Apr. 2014 13:15
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es wird eine neue Datumsspalte (Spaltenname z.B. "Heute"). Diese Spalte hat als Standardwert "Heutiges Datum" markiert.
Nun erstellt man die berechnete Spalte mit der Formel =IF(duedate<=TODAY(),"RED",IF(duedate<=TODAY()+3,"ORANGE","GREEN")). Dort ersetzt man alle TODAY mit der neu erstellten Datumsspalte. Dann sollte die Formel so aussehen:

=IF(duedate<=Heute,"RED",IF(duedate<=Heute+3,"ORANGE","GREEN"))

Jetzt kann die Spalte "Heute" wieder gelöscht werden!!

Um zu testen, ob das Datum der neuen Spalte "Heute" auch wirklich aktualisiert wird (obwohl sie gelöscht wurde) sollte, wenn der Test am heutigen Tag stattfindet das duedate=29.04.2014 sein. Wenn ich dir Formel richtig verstanden habe, sollte dann in der berechneten Spalte RED auftauchen. Morgen, falls der Trick mit der Datumsspalte funktioniert hat, müsste sich der Status der berechneten Spalte auf GREEN setzen.

Ich hoffe, dass ich mich nun deutlicher ausdrücken konnte.

 

Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 29 Apr. 2014 13:26
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Funktion soll alle Daten der Deadline, welche bis drei Tage in der Zukunft liegen als "orange" zurückgeben. Alle Daten die kleiner gleich heute sind, werden "red" und alle anderen "green".

Ich werde Ihren Trick mit der Datumsspalte probieren. Danke schonmal. :)

Ohne Rang
367 Beiträge
Tiac Als Antwort am 29 Apr. 2014 13:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hier ist noch ein Link (auf englisch), vielleicht ist es dort etwas besser erklärt: http://blogs.msdn.com/b/cjohnson/archive/2006/03/16/552314.aspx 

Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 29 Apr. 2014 13:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für den Link. Ich hoffe mal, dass es funktioniert. Sehen kann ich es ja dann morgen :)

 

Selten dämlich von Microsoft solch esentielle Dinge nicht von Anfang an, ohne stupiden Workaround, zu implementieren.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 29 Apr. 2014 13:40
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das funktioniert mit einer berechneten Spalte nicht.

In SharePoint gibt es aber Erweiterungen zu XSLT, die man direkt für bedingte Formatierungen benutzen kann: http://blogs.evocom.de/af/archive/2011/04/07/datumsvergleiche-für-bedingte-formatierungen-in-datenansichten.aspx

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 29 Apr. 2014 13:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Naja.

Mit der bedingten Formatierung bekomme ich aber nur zwei Farben hin (das in Ihrem Blog beschriebene Problem mit den Datumsformaten habe ich zum Glück nicht). Aber ich kann nicht drei Bedingungen auf eine Spalte zuweisen:

http://www.fotos-hochladen.net/uploads/exampleshpmupl2bv13n.png

Status (Spalte 1) ist samt "calculated value".

Status_alt (Spalte 6) ist meine Lösung mit der bed. Formatierung

 

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 29 Apr. 2014 14:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du kannst aber genau das, was Du bisher in der Formel für das berechnete Feld hattest, auch einfach direkt im XSLT abbilden. Das geht dann auch mit 15 Farben wenn Du möchtest. Das berechnete Feld brauchst Du gar nicht.

PS: wir duzen uns hier üblicherweise :-)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 29 Apr. 2014 14:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Leider weiß ich nicht an welcher Stelle im Code, oder ähnliches. Hab bei Programmieren in der Schule wohl nicht richtig aufgepasst ;-)

Wie kann ich meinen Befehl/Code

 =IF(duedate<=TODAY(),"RED",IF(duedate<=TODAY()+3,"ORANGE","GREEN"))

im SharePoint Designer denn so einsetzen, dass er mir die Spalte Status 2 in meiner Liste erzeugt?

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 29 Apr. 2014 15:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wenn Du Dir im Designer über die Oberfläche irgendeine bedingte Formatierung zusammenklickst (z.B. für die DueDate-Spalte) erzeugt er Dir schonmal eine Bedingung an der richtigen Stelle. In der Codeansicht kannst Du die jetzt weiter bearbeiten und anpassen.

Irgendwo findest Du sowas:
<xsl:if test="hier ist die Bedingung" ...

Diese Bedingung kopierst Du Dir jetzt so oft, wie Du Farben möchtest und paßt sie jeweils an (in XSLT gibt es kein else if oder ähnliches):
<xsl:if test="DueDate < Heute"
ROT
</xsl:if>
<xsl:if test="DueDate < Heute + 3"
ORANGE
</xsl:if>
<xsl:if test="DueDate < Heute+10000"
GREEN
</xsl:if>

Edit: die Reihenfolge der Bedingungen umdrehen, sonst paßt die Logik nicht

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 29 Apr. 2014 15:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Andi,

erstmal danke für deine Bemühungen.

Aber ich bring es so nicht hin... ich nutze die englische Version, also muss ich anstatt "<" "&lt;" und anstatt "heute" "Today" nutzen richtig? Leider zeigt er mir dann gar nichts in meinem Status_alternativ Feld an (siehe Bild weiter oben).

Oder soll mir dein

<xsl:if test="DueDate < Heute"
ROT
</xsl:if>
<xsl:if test="DueDate < Heute + 3"
ORANGE
</xsl:if>
<xsl:if test="DueDate < Heute+10000"
GREEN
</xsl:if>

den Text in das Statusfeld schreiben?

Gruß

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 29 Apr. 2014 16:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Was ich da gepostet habe, funktioniert so natürlich gar nicht. Es soll nur die Vorgehensweise verdeutlichen. Lies Dir nochmal den Blog durch, den ich weiter oben verlinkt hatte. Dort ist beschrieben, wie Du die Heute-Funktiion benutzen kannst. Also nicht einfach "Heute" oder "Today", sondern die Erweiterung ddwrt:today benutzen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 5 Mai 2014 09:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Andi,

ich habe mir deinen Blog erneut durchgelesen. Ich bekomme es einfach nicht hin, dass er drei Tage vor Erreichen des due dates auf "Gelb" springt. Das funktioniert bie mir nicht.

Ich habe imo zwei Ampeln (Rot und Grün) über die bed. Formatierung zusammen geklickt. Die funktionieren auch.

Heißt: Rot sobald das Fälligkeitsdatum erreicht ist. Grün deckt den Zeitraum davor ab.

Hast du vielleicht noch einen Tipp für mich?

Gruß

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Mai 2014 10:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe doch oben die grundsätzliche Struktur geschrieben - Du mußt nur die Reihenfolge der Abfragen umdrehen. Nur durch Zusammenklicken wird es wahrscheinlich nicht gehen, sondern man muß in der Codeansicht Hand anlegen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 5 Mai 2014 10:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi,

habe ich natürlich schon getestet:

<xsl:if test="ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($thisNode/@duedate))) &gt; ddwrt:today+3" ddwrt:cf_explicit="1">background-image: url(&apos;../../images1/mae_ampel_gruen_new.png&apos;); background-repeat: no-repeat;</xsl:if>
  

 <xsl:if test="ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($thisNode/@duedate))) &gt; ddwrt:today" ddwrt:cf_explicit="1">background-image: url(&apos;../../images1/mae_ampel_gelb_new.png&apos;); background-repeat: no-repeat;</xsl:if>
   

<xsl:if test="ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($thisNode/@duedate))) &lt; ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($Today)))" ddwrt:cf_explicit="1">background-image: url(&apos;../../images1/mae_ampel_rot_eingetragen_new.png&apos;); background-repeat: no-repeat;</xsl:if>

 

Nur leider zeigt er mir gar nichts mir jetzt in gar keinem fall mehr grün an ... ich sag ja es ist wie verhext.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Mai 2014 11:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

XSL ist case sensitive, d.h. es unterscheidet zwischen Groß- und Kleinschreibung. Bist Du sicher, daß das Feld duedate heißt und nicht DueDate?

Außerdem hast Du noch ein Logikproblem: Du prüfst zuerst, ob duedate größer als Heute+3 ist und danach, ob es größer als Heute ist. Wenn die erste Bedingung erfüllt ist, ist es die zweite in jedem Fall auch. Das solltest Du umdrehen. Außerdem hast Du ein Lücke, wenn duedate exakt Heute ist. Du prüfst ja nur auf größer und kleiner. Gleich wird nicht berücksichtigt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 5 Mai 2014 11:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Erstmal danke ich dir für deine schnellen Antworten.

Auf die Groß- und Kleinschreibung habe ich extra geachtet. Habe die Bedienungen jetzt umgedreht. Dabei fällt mir auf, dass bei der einfach

bla bla &gt; ddwrt:today

einfach gar nicht die hintere Bedienung dargestellt wird.

Nur folgendes führt zur Ausgabe der eingestellten Formatvorlage:

&gt; ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($Today)))

Da ich ja die +3 Tage möchte, habe ich $Today+3 eingesetzt. Leider funktioniert auch dies nicht... :(

Muss ich den hinteren Teil noch ändern, damit er es auch in SharePoint ausgibt?

test="ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($thisNode/@duedate))) &gt; ddwrt:today"

Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 5 Mai 2014 15:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich hab evtl. die Lösung meines Problems.
Was ich mit meiner Formel ja gemacht habe war die Umwandlung in diese "ticks". Dann kann ich natürlich nicht hinten "...)))+3) stehen lassen, da dies ja nur 3 Ticks sind...

3 Tage sind 2592000000000 Ticks. Nun scheint es mit der bedingten Formatierung zu funktionieren.

 

Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 6 Mai 2014 09:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

@Andi:
Ich habe die Formel in deinem Blog verwendet und den SharePoint auf deutsch eingestellt. Funktioniert alles wunderbar. :) Danke dafür.

Wenn du mir jetzt noch mitteilen könntest, was ich an

translate(substring-before(ddwrt:TodayIso(),'T'),'-','')

ändern muss, damit ich folgendes Datumsformat nutzen kann (DD/MM/YYYY).

Danke im Voraus!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 6 Mai 2014 09:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Formel ist zum Vergleichen der Datumswerte und darf nicht geändert werden. Wenn Du ein Datum ausgeben möchtest, kannst Du das mit <xsl:value-of select="Hier das Datum" /> erreichen. Normalerweise sind Datumswerte bereits im richtigen Landesformat.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
14 Beiträge
MaximilianB Als Antwort am 29 Apr. 2014 14:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

@Andi:

Hier noch meine beiden Codes der bedingten Formatierung, da auch ich daran zweifele, dass das morgen automatisch aktualisiert wurde (mit dem Today als Wert im calculated value Feld):

<xsl:attribute name="style">
   <xsl:if test="ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($thisNode/@duedate))) &lt;= ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($Today)))" ddwrt:cf_explicit="1">background-image: url(&apos;../../images1/mae_ampel_rot_eingetragen_new.png&apos;); background-repeat: no-repeat;</xsl:if>
   <xsl:if test="ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($thisNode/@duedate+3))) &gt; ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($Today)))" ddwrt:cf_explicit="1">background-image: url(&apos;../../images1/mae_ampel_gelb_new.png&apos;); background-repeat: no-repeat;</xsl:if>
   <xsl:if test="ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($thisNode/@duedate))) &gt; ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($Today)))" ddwrt:cf_explicit="1">background-image: url(&apos;../../images1/mae_ampel_gruen_new.png&apos;); background-repeat: no-repeat;</xsl:if>
  </xsl:attribute>

leider wird mir keine gelbe Ampel angezeigt. :(

Gibts hier einen Lösungsvorschlag?