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.




Erinnerungsfunktion bei Verträgen

Geprüfte Antwort Dieser Beitrag hat 24 Antworten

Ohne Rang
221 Beiträge
Llorente erstellt 26 Feb. 2015 14:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich bin gerade dabei eine DB für Verträge unserer Firma zu erstellen. Diese soll eine Erinnerungsfunktion beinhalten und ich habe diese wie folgt umgesetzt:

  • Es gibt ein Feld "Erinnerungsdatum"
  • Sobald ein neuer Vertrag erstellt wird, startet der Workflow und prüft, ob das Feld "Erinnerungsdatum" gleich heute ist
  • Wenn heute und Erinnerungsdatum übereinstimmen, geht eine Mail raus

Dies funktioniert auch einwandfrei. Nur frage ich mich wie sinnvoll dies ist. Denn wenn ich mir vorstelle, dass ein Vertrag bis Dezember 2017 abgeschlossen wird, dann liegt das Erinnerungsdatum vielleicht so 3 Monate vorher im Oktober 2017. So würde der Workflow gut 2 Jahren laufen. Was ist nun wenn aber in den zwei Jahren nur einmal der Server neu gestartet wird?? Dann müssten ja auf einmal alle Erinenrungsworkflows gekillt werden oder? Gibt es keine bessere Umsetzung wie meine?

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 26 Feb. 2015 14:15
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Lasse den Workflow einfach automatisch bei Neuanlage starten. Benutze "Auf Feldänderung im aktuellen Element warten" und warte, bis das Feld Erinnerungsdatum nicht leer ist. Benutze jetzt "Bis Datum anhalten" und lasse den Workflow bis zum Erinnerungsdatum warten. Verschicke die Mail.

Das funktioniert so vollkommen problemlos. Die wartenden Workflows werden in der Zeit keinerlei Ressourcen verbrauchen und sie überleben auch problemlos Neustarts. Sogar nach einer Migration werden sie weiterlaufen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 26 Feb. 2015 14:40
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ja das funktioniert wirklich! Da nur ich an dem Server rumschraube, habe ich es mal getestet und ihn neu gestartet! Der workflow hat weitehrin den Status "In Bearbeitung" Danke!

Ohne Rang
221 Beiträge
Llorente Als Antwort am 26 Feb. 2015 15:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe noch eine weitere Frage dazu. Ich tüftle gerade daran, dass der Nutzer eifnach nur eine Anzahl Tage eingibt und ein Workflow im Hintergrund das Erinnerungsdatum berechnet. Nur leider bekomme ich das nicht hin.... Es sollte quasi so das Fälligkeitsdatum minus die Tage, die der Nutzer eingegeben hat ausgerechnet werden. Nur soll dieses Format dann ein Datum sein und dies ist wie ich sehe unmöglich. Datum minus Zahl gibt immer eine Zahl oder? man kann zwar auf Stunden etc. hochrechnen aber ein Datum bekommt man nicht mehr raus oder?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 26 Feb. 2015 15:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du kannst das auch einfach als Anzahl-Tage belassen und im Workflow "Für Dauer anhalten" verwenden. Damit kann man auch eine Pause von x Tagen machen.

Oder Du erstellst Dir eine Workflowvariable vom Typ Datum. Mit "Workflowvariable festlegen" setzt Du sie auf "Heute". Ich weiß nicht mehr genau, wie die Aktion heißt, aber mit sowas wie "Zeit zum Datum hinzufügen" kannst Du jetzt Deine Anzah-Tage zur Variablen addieren.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 27 Feb. 2015 12:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

Oder Du erstellst Dir eine Workflowvariable vom Typ Datum. Mit "Workflowvariable festlegen" setzt Du sie auf "Heute". Ich weiß nicht mehr genau, wie die Aktion heißt, aber mit sowas wie "Zeit zum Datum hinzufügen" kannst Du jetzt Deine Anzah-Tage zur Variablen addieren.

[/quote]

Passt und funktioniert! Der User kann jetzt einfach eine Anzahl von Tagen eingeben und das Datum dazu wird erstellt :)

Nur wie ist das jetzt wenn jemand etwas nachträglich ändert?? Denn dieser Workflow befasst sich ja nur mit dem Neu-Anlegen eines Eintrags. Und da das Erinnerungsfeld ja keine Pflicht ist, kann man es ja auch bzw. sollte man es ja auch nachträglich ändern können.

Kann ich einfach beide Haken setzen, also das der Workflow bei neuanlegen und ändern gestartet wird? Aber dann würde ja manchmal die Mail doppelt rauskommen wenn man z.b. die Erinnerung drin steht aber trotzdem etwas am Eintrag geändert wird.....

Vielleicht würde sich das ja darüber lösen lassen, dass man schaut ob die Anzahl der Tage bis zur Erinnerung leer ist oder?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Feb. 2015 12:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Llorente"]Nur wie ist das jetzt wenn jemand etwas nachträglich ändert?? [/quote]

Damit hast Du jetzt einen Knackpunkt eines ordentlichen Vertragsmanagements erreicht ;-)

Das wird so nicht funktionieren, weil ein pausierender Workflow erst zum vorgegebenen Zeitpunkt wieder reagiert und in der Zwischenzeit nichts mitbekommt.

Es gibt zwei Möglichkeiten, wie man das lösen kann:

1. per Timerjob (muß programmiert werden) kann man z.B. einmal täglich fällige Dokumente suchen und etwas mit ihnen machen.

2. bei 2013er Workflows gibt es Schleifen. Man kann den Workflow in einer Schleife ebenfalls täglich das Fälligkeitsdatum prüfen lassen. Wenn es erreicht ist, macht er etwas und verläßt dann die Schleife.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 27 Feb. 2015 12:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

1. per Timerjob (muß programmiert werden) kann man z.B. einmal täglich fällige Dokumente suchen und etwas mit ihnen machen.

2. bei 2013er Workflows gibt es Schleifen. Man kann den Workflow in einer Schleife ebenfalls täglich das Fälligkeitsdatum prüfen lassen. Wenn es erreicht ist, macht er etwas und verläßt dann die Schleife.

[/quote]

Leider habe ich nur kurz Zeit für diese Aufgabe und die beiden Varianten machen keinen Sinn. 2013er Workflows gibt's ja mit der Foundation nicht oder?

Wie könnte ich das Problem dennoch umgehen ohne Erinnerungen als Pflichtfeld anzugeben? Nur beim Anlegen eine Erinnerung zulassen und später in der Editfrom dieses Feld einfach ausgrauen? Wäre aber eigentlich auch nicht sinnvoll oder gibt's was besseres :)

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Feb. 2015 12:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Llorente"]2013er Workflows gibt's ja mit der Foundation nicht oder?[/quote]

Nein, diese Option fällt dann wohl flach .-(

[quote user="Llorente"]Nur beim Anlegen eine Erinnerung zulassen und später in der Editfrom dieses Feld einfach ausgrauen?[/quote]

Ist das einzige, was mir spontan einfällt. Du kannst es etwas mehr sophisticated machen, indem Du es später nur ausgraust, wenn es nicht leer ist. Dadurch kann ein Benutzer es auch erst später ausfüllen, aber wenn es einmal gefüllt ist nicht mehr ändern.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 27 Feb. 2015 13:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

[quote user="Llorente"]Nur beim Anlegen eine Erinnerung zulassen und später in der Editfrom dieses Feld einfach ausgrauen?[/quote]

Ist das einzige, was mir spontan einfällt. Du kannst es etwas mehr sophisticated machen, indem Du es später nur ausgraust, wenn es nicht leer ist. Dadurch kann ein Benutzer es auch erst später ausfüllen, aber wenn es einmal gefüllt ist nicht mehr ändern.

[/quote]

Meine erste Frage ist, wie ich dies überhaupt machen kann... Denn ich weiß nur wie man über den SP-Manager angeben kann, ob ein Feld in der EditForm drin ist oder nicht.

Außerdem müsste ich dann ja eigentlich den gleichen Workflow nochmal basteln und diesen nur bei Änderungen und explizit nur bei Änderungen des eienn Feldes starten oder?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Feb. 2015 13:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das mit dem Workflow hatte ich oben glaub schon erwähnt: lasse ihn weiter bei Neuanlage starten und benutze die Aktion "Auf Feldänderung im aktuellen Element warten", um zu warten, bis das Feld nicht leer ist.

Um es dynamisch auszublenden, mußt Du etwas JavaScript auf das Formular packen. Das hier ist dabei eine große Hilfe: http://sputility.codeplex.com/

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 2 März 2015 10:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich probiere mich gerade ein bisschen an dem SPUtility.js und hoffe, dass dies klappen wird.

Aber was mir weiterhin aufgefallen ist: Ich habe den Workflow erst starten lassen mit "Wenn Erinnerung In Tagen" ist ungleich 0", weil man nicht ist leer auswählen kann bei Zahlenfelder. Jetzt wollte ich es durch "Auf Feldänderung warten" ändern, was ja der Grundstein für das Javascript ist. Leider funktioniert dies aber nicht wenn ich "Auf Erinnerung in Tagen ist ungleich 0 warten" ändere. Der Workflow wird jedes Mal einfach beendet, wenn das Feld leer ist. Anscheinend versteht er nicht dass er warten soll ,wenn es leer ist. Meines Wissens wird es ja mit 0 befüllt, wenn man Nichts einträgt und so müsste dies doch stimmen oder?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 2 März 2015 11:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das klingt mal wieder nach einem typischen Workflowverhalten. Die Dinger sind manchmal einfach seltsam. Hast Du für das Feld auch 0 (null) als Defaultwert gesetzt?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 2 März 2015 11:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich sehe gerade im SP-Manager, dass der DefaultValue keine Inhalt hat. Aber komischerweise funktioniert es ja mit der Workflow-Bedingug "Wenn Erinnerung ungleich 0". Soll ich einfach einmal null eintragen als Default Wert? oder funktioniert auf Feldänderung warten dann nicht da ja immer eine Null eingetragen wird?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 2 März 2015 11:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ja, trage als Defaultwert 0 ein, dann müßte "auf Feldänderung warten" funktionieren. Du wartest ja auf ungleich 0 (oder größer 0).

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 2 März 2015 15:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das funktioniert mal wieder einwandfrei !

Nur dass mit deinem Tipp zu SPUtility eher nicht :( Hast du selbst Erfahrung mit dem "Ding" oder selbst noch nicht damit gearbeitet? Ich bin nämlich gefühlte 100 Mal die Anleitung heute durch und es passiert einfach nichts. Auch wenn ich alle Beispiele des Autors benutze, tut sich eifnach nichts obwohl alle Dateien in einer Dokumenten Bibliothek hochgeladen wurden

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 3 März 2015 08:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe selbst schon viel mit SPUtility gearbeitet und finde das Teil sehr nützlich. Vielleicht solltest Du mal in einem Debugger damit rumspielen, um es kennenzulernen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 3 März 2015 09:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ja das wäre natürlich nützlich aber mein Problem ist ja in einem viel früheren Status. Ich selbst habe ja noch keinen Code geschrieben, da mein SharePoint Server ja nichts umsetzt. Nach dieser Anleitung http://sputility.codeplex.com/wikipage?title=Installation&referringTitle=Home habe ich alles zu 100% mit den Beispielen umgesetzt und es passiert einfach nichts. ich glaube einfach dass mir irgendeine Einstellung fehlt, dass es funktioniert. Aber ich glaube da sollte ich mich eher auf der SPUtility Seite schlau machen oder?

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 3 März 2015 09:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ist natürlich schwer da aus der Ferne was zu sagen.

Wird die sputility.js denn korrekt geladen? SPUtility hängt wiederum von jQuery ab, das unbedingt davor eingebunden werden muß. Ist das ebenfalls korrekt? Und dann brauchst Du noch etwas Code in der Seite, den Du per SharePoint Designer oder Script Editor Webpart einbinden kannst.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 3 März 2015 10:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]Ist natürlich schwer da aus der Ferne was zu sagen.[/quote]

Ich weiß  :(

Also ich habe als erstes jquery-1.11.2.min.js heruntergeladen und in eine neue Dokumentenliste abgelegt. Dasselbe habe ich mit der Datei sputility.min.js gemacht. Anschließend habe ich die helloworld.html Beispiel Datei heruntergeladen und auch in die Liste kopiert.

Dann über Formularwebparts die Default Anzeigeseite (Standardanzeigeformular) geöffnet, ein neuen Webpart hinzugefügt und diesem einen Inhalts-Editor. Dem Editor habe ich die URL zur Helloworld.html Datei übergeben und die Bearbeitung beendet. In der HTML Datei habe ich sein Beispiel auch mal umgeändert um z.B. mit Hide eine Spalte verschwinden zu lassen. Aber egal was ich mache, wenn ich ein Eintrag anzeigen lasse wird die Spalte nicht versteckt oder ähnliches. Es passiert einfach gar nichts....

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 3 März 2015 10:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vergiß die HTML-Datei. Nimm ein Script Editor Webpart und füge dort die beiden Links auf die Dateien ein:

<script type="text/javascript" src="/site/library/jquery.js"></script>

Füge dann in einem weiteren Scriptblock ein Testscript ein:

<script type="text/javascript">
$(document).ready(function() {
SPUtility.GetSPFieldByInternalName("Title").Hide();
});
</script>

Ungetestet und aus dem Gedächtnis geschrieben, aber es sollte die grundsätzliche Vorgehensweise zeigen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 3 März 2015 14:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

Vergiß die HTML-Datei. Nimm ein Script Editor Webpart und füge dort die beiden Links auf die Dateien ein:

[/quote]

Das war eine gute Idee :) Denn damit klappt es auf einmal einwandfrei! DANKE!

 

Jetzt bastle ich gerade an meiner Anweisung. Diese funktioniert schon einmal:

$(document).ready(function() {

SPUtility.GetSPFieldByInternalName("_x0021__x002d_Erinnerung_x0020_i").MakeReadOnly();});

Anmerkung: x0021__x002d_Erinnerung_x0020_i ist der Static Name meines Feldes

 

Aber ich komm einfach nicht drauf wie ich das mit einer if Abfrage machen soll. Eigentlich muss diese ja nur schauen, ob 0 eingetragen ist oder nicht. Ich dacht dass es eigentlich so geht; aber leider geht das nicht:

$(document).ready(function() {

if ("_x0021__x002d_Erinnerung_x0020_i" > 0)

SPUtility.GetSPFieldByInternalName("_x0021__x002d_Erinnerung_x0020_i").MakeReadOnly();});

 

Hast du irgendein Plan was ich falsch mache? Ist nicht geraed mein Spezial Gebiet ;)

 

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 3 März 2015 15:24
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ungefähr so:

var field = SPUtility.GetSPFieldByInternalName("xxx");
var fieldValue = field.GetValue() //oder field.GetFieldValue()?
if (fieldValue == "0") {
// Feld ist 0
} else {
// Feld ist ungleich 0
}

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
221 Beiträge
Llorente Als Antwort am 3 März 2015 15:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Läuft einwandfrei! Mir bleibt mal wieder nix anderes als DANKE zu sagen ;)

Ohne Rang
221 Beiträge
Llorente Als Antwort am 4 März 2015 15:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nach einem Tag der  erfolglosen Suche, probiere ich es hier einmal! Ich möchte ein Datumsfeld als readonly deklarieren. Ist bei allen anderen Feldern, wie z.B. Number- oder Text-Felder kein Problem. Leider wird das Datum fällt einfach immer readonly und quasi geleert. Man sieht den Eintrag nicht mehr und dies ist wohl kaum Sinn der Sache. Mein Code dazu

   <script type="text/javascript" src="/…./jquery-1.11.2.min.js"></script>
      <script type="text/javascript" src="/…./sputility.min.js"></script>
     <script type="text/javascript">
       $(document).ready(function() {

      SPUtility.GetSPFieldByInternalName("DueDate").MakeReadOnly();
          };</script>