0

Diese Funktion darf keine Datenänderungen vornehmen

Hallo,

 

ich hatte für die in meiner DB verwalteten Artikel die Idee, mir eine Benachrichtigung zukommen zu lassen, wenn der Mindestbestand unterschritten wird. Ich hab das testweise mit Slack umgesetzt, die Benachrichtigung selbst klappt soweit auch. Da ich die Benachrichtigung aber natürlich nur beim ersten mal, wenn der Mindestbestand unterschritten wird, bekommen will, wollte ich noch ein verstecktes Ja/Nein-Feld ("Bestandswarnung") in's Spiel bringen. Die Benachrichtigung sollte dann nur erfolgen, wenn das Ja/Nein-Feld "false" ist. Auch das klappt soweit. Ich schaffe es nur nicht, das Ja/Nein-Feld nach der Benachrichtigung auf "true" zu setzen.

 

Folgendes habe ich in meinem Berechnungsfeld "Bestand" hinterlegt:

 

let myBestand := sum(Zugang.Anzahl) - sum(Abgang.Anzahl) - cnt(Komponenten.Projekt.'Projekt-Name');
if myBestand - Mindestbestand < 0 and Bestandwarnung != true then
http("POST", "https://hooks.slack.com/services/API/KEY/HIER/NATUERLICH/ERSETZT", {
'Content-type': "application/json",
text: "Mindestbestand " + 'Artikel-Nr.' + " unterschritten"
})
end;
if myBestand - Mindestbestand < 0 and Bestandwarnung != true then
Bestandwarnung = true
end;
myBestand

 

Bei der Variante ändert er das Ja/Nein-Feld "Bestandwarnung" nicht, ersetze ich es durch "Bestandwarnung := true" wie ich es von andererstelle gewohnt bin, erhalte ich die Meldung "Diese Funktion darf keine Datenänderungen vornehmen" und ich kann die Berechnung nicht speichern.

 

Wie ich mich kenne, ist die Lösung mal wieder recht simpel - ich komm' nur partout nicht drauf... :-/

 

lg, Torsten

5 Antworten

null
    • Torsten_Stang.1
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Örgs, 

    natürlich hab ich keine zwei gleichen if-Abfragen gemacht, die hatte ich nur testweise mal reingenommen, weil ich mir nicht sicher war, ob das Script sich an mehreren Befehlen zwischen then und end stört. Grundschuld-Debugging also :-)

    lg, Torsten

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Torsten,

    ein Berechnungsfeld darf wirklich keine Datenänderungen vornehmen. Ich würde die Formel als Trigger nach Änderung auf Tabellenebene packen:

    ---

    let myBestand := sum(Zugang.Anzahl) - sum(Abgang.Anzahl) - cnt(Komponenten.Projekt.'Projekt-Name');
    if myBestand - Mindestbestand < 0 and Bestandwarnung != true then
    http("POST", "https://hooks.slack.com/services/API/KEY/HIER/NATUERLICH/ERSETZT", {
    'Content-type': "application/json",
    text: "Mindestbestand " + 'Artikel-Nr.' + " unterschritten"
    });

    Bestandwarnung := true
    end;

    ---

    und Berechnetes Feld sollte einfach das tun, wofür es gedacht wurde:

    ---

    sum(Zugang.Anzahl) - sum(Abgang.Anzahl) - cnt(Komponenten.Projekt.'Projekt-Name')

    ---

    Leo

    • Torsten_Stang.1
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

     

    ja, den Weg habe ich auch schon angetestet - und bereits genau so wie von Dir vorgeschlagen dort eingetragen. Leider funktioniert dort bei Datensätzen mit zutreffenden Kriterien weder die Benachrichtigung noch die Feldänderung... :-/

     

    lg, Torsten

    • Torsten_Stang.1
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Ergänzung:

     

    - In der App werden weder die Benachrichtigung noch die Feldänderung getriggert,

    - ebenso auf dem iPad,

    - in der Web-App wird die Benachrichtigung getriggert, aber das Feld nicht geändert. :-/

     

    lg, Torsten 

    • Birger_H
    • vor 6 Jahren
    • Gemeldet - anzeigen

    In der Tat is es oft schwierig, den korrekten Trigger genau zu finden. 

    Buchen Sie einen Support-Termin:

    https://calendly.com/birger-hansen/15min

Content aside

  • vor 6 JahrenZuletzt aktiv
  • 5Antworten
  • 3034Ansichten