Announcement

Collapse
No announcement yet.

Einfachauswahl autoatisieren

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Einfachauswahl autoatisieren

    Hallo zusammen
    Ich habe ein Einfachauswahlfeld und ich möchte es automatisieren.
    Dabei soll das System von allein wissen welcher Status da rein muss.
    Im Anhang befindet sich ein Bild mit allen Status mit allen optionen.

    Ein Beispiel dafür wie das System laufen soll ist folgender:
    Wenn das „Ende der Vertragsperiode“ heute ist soll da Zahlungsziel überschritten stehen.
    Sollte das nicht der Fall sein so soll das System automatisch den richtigen Text eintragen.

    Ich habe versucht das mit einem Workflow zu lösen.
    Also habe ich zu jedem Status von dem Einfachauswahlfeld in eine Aktion Bedingung gemacht.
    Zum Beispiel habe ich als Action gesagt, das der „Beginn der Vertragsperiode“ von heute sein soll plus null Tage.
    Das Problem dabei ist das, wenn ich mehr als eine Action habe das Programm nicht mehr weiß was es machen soll.

    Als zweites habe ich versucht meine Bedingungen zu erweitern in dem ich als Aktion eingegeben habe, das der „Beginn der Vertragsperiode“ von heute plus 0 Tage sein soll, das „Ende der Vertragsperiode“ soll plus 365 Tage sein soll und die „Kulanz“ von heute plus 30 Tage haben soll.
    Das habe ich dann auch getestet aber auch ohne Erfolg.

    Gibt es eine Lösung, wie ich das hin bekommen kann?
    Vielleicht gibt es eine Lösung ohne den Workflow.


    Ich arbeite mit Version 6.1.7 bei Espo und Version 2.7.7 für das Advanced Pack.

    Lena

  • #2
    Hallo, das geht mit einer bzw. mehreren Formel(n) (ifThen und datetimeDiff). Am besten erstmal nach der Dokumentation probieren und falls es dann hakt, hier nochmal fragen.

    Comment


    • #3
      Hallo

      danke für den Tipp mit datetimeDiff.
      Ich habe es direkt ausprobiert am anfang hat es auch noch geklappt, doch jetzt schaltet das System nicht mehr austomatisch um.
      Den log von Espo habe ich mir auch angeguckt und habe festgestellt das ich immer eine fhlermeldung bekommen habe.

      Den Fehler könnt Ihr hier sehen:
      [2021-08-12 09:45:17] ERROR: Workflow[6113d72a9ba51d6cb]: Action failed [updateEntity] with cid [5], details: function: ifThen. [] []
      [2021-08-12 09:46:27] ERROR: Workflow[6113d72a9ba51d6cb]: Action failed [updateEntity] with cid [0], details: Incorrect round brackets in expression ifThen (beginning datetimeDiff()) !IfThenkeinWartungsvertrag true).. [] []
      [2021-08-12 09:46:27] ERROR: Workflow[6113d72a9ba51d6cb]: Action failed [updateEntity] with cid [1], details: function: ifThen. [] []
      [2021-08-12 09:46:27] ERROR: Workflow[6113d72a9ba51d6cb]: Action failed [updateEntity] with cid [2], details: function: ifThen. [] []
      [2021-08-12 09:46:27] ERROR: Workflow[6113d72a9ba51d6cb]: Action failed [updateEntity] with cid [3], details: function: ifThen. [] []

      Wie kann ich den Fehler bei den Workflows behen?

      Ich habe gesehen das der Satus von manchen Jobs auf schwebend gestellt sind kann das damit zusammenhängen?
      Last edited by Kertscher; 08-12-2021, 12:40 PM.

      Comment


      • #4
        Kannst Du mal die Formel posten?

        Comment


        • #5
          Auf den Bildern kannst du die einzelnen Formeln sehen, die ich dafür benutzt habe.

          Comment


          • #6
            Hallo, ich arbeite zwar nicht mit dem Workflow Modul, aber die Formeln kann man auch direkt in der Entity schreiben. ich gehe davon aus, dass die Syntax gleich ist.
            Ich nehme mal den ersten Screenshot als Beispiel.

            Ich nehme an, dass bei Erreichen einer bestimmten Tagesanzahl (Frist) das Feld Status den Wert "Zahlungsziel überschritten" bekommen soll.

            Die Formel IfThen wird aufgebaut aus einer Bedingung (If), die bei true oder false einen bestimmten Wert anzeigen soll. If ist bei Dir die mit dateTimeDiff errechnete Tageszahl.

            Ohne die Entity und die Felder zu kennen, ist es nicht eindeutig zu sagen, wie die Formel aussehen muss. Hier mal Möglichkeiten.

            Wie ich das sehe, gibt es die Felder "end", "beginning" und "graceperiode". Mit der dateDiff muss nun zwischen Beginn und Ende der Graceperiode die Tageszahl errechnet werden. Das wird in das If-Kommando gsetzt. end und beginning müssen Datumsfelder sein.

            Erstes Kommando also (die ganze Formel schreibe ich am Ende):
            "abgelaufene Tage" wäre ein neues Feld zum Zählen der Tage. Das Feld muss nicht im Layout erscheinen.
            Also, erstmal die Anzahl der Tage errechnen.

            Code:
            abgelaufeneTage=datetime\diff('beginning', 'end', 'days');
            //Dieser Wert ist negativ, wenn beginning kleiner als end ist. Mit dieser Formel wird die Tageszahl als Differenz zwischen Startdatum und Enddatum berechnet
            .

            Falls ihr 'graceperiode' als Tageszahl angebt, muss die If-Bedingung so aussehen:

            If

            Code:
            abgelaufeneTage > graceperiode,
            //Hier würde der erste Schritt der Formel prüfen, ob die Differenz zwischen abgelaufenen Tagen und der angegebenen Graceperiode kleiner als die graceperiode ist.
            Nun kommt das Then Kommando. Wenn die Bedingung erfüllt oder nicht erfüllt ist (true oder false), soll etwas in dem Feld Status geändert werden.

            Then

            Code:
            entity\set('status', 'Zahlungsziel überschritten');
            //Damit wird das Feld Status auf den Wert Zahlungsziel überschritten gesetzt.
            Die ganze Formel

            Code:
            abgelaufeneTage=datetime\diff('beginning', 'end', 'days');
            
            ifThen(
                      abgelaufeneTage > graceperiode,
                      entity\set('status', 'Zahlungsziel überschritten')
            );
            Wichtig: einfache Anführungszeichen für die Feldnamen, nach If ein Komma, am Ende ein Semikolon. Klammern sind oft Fehlerquellen.
            Ich kann nicht garantieren, dass die Formel so komplett richtig ist, eventuell muss man nochmal probieren. Aber grundsätzlich ist das der Ansatz.

            Comment

            Working...
            X