0

Zeilen erstellen und befüllen als trigger on create

Hallo. Ich habe 3 Tabellen in meiner Darenbank: Projekte, Berechnungen und Tasks. Mit jeder neuen Berechnungen-zeile solle nun eine Task-zeile erstellt werden. Das funktioniert gut indem ich

let num_id := number(substring(string(Id), 1, length(string(Id)))); 

und

let dociv := (create Tasks);
dociv.('Link zu Berechnung (Subsection)' := num_id);

in den trigger on create von "Berechnungen" schreibe. 

Ich habe jetzt also eine Task-zeile, die mit der Berechnungen- Zeile verlinkt ist. Meine zwei Probleme: 

1. Ich möchte die neue Task-Zeile aber auch mit einer Zeile aus der Projekt-Tabelle verlinken. Die Berechnungen-zeile selbst ist mit dieser Projekt-Zeile verlinkt. Ich schreibe also 

let proj_id_num := Projekt;
let dociv := (create Tasks);
dociv.(Projekte := proj_id_num);

Die neue Task Zeile wird aber nicht erfolgreich mit der Projektzeile verlinkt, obwohl ich die ID in gleicher Form wie die der Berechnungen-Zeile extrahiere.

2. Ein weiteres Feld der Task-Zeile,welches befüllt werden soll ist ein Auswalfeld namens "Typ". Die erste Auswahlmöglichkeit soll gewählt werden. Ich schreibe also 

let dociv := (create Tasks);
dociv.(Typ = text(1));

Das funkioniert auch nicht. Es wird keine Auswahl getroffen. 

 

Hier nochmal der gesammte Code der im trigger on create meiner Berechnungstabelle geschrieben ist: 

let proj_id_num := Projekt;
let num_id := number(substring(string(Id), 1, length(string(Id))));
let dociv := (create Tasks);
dociv.('Link zu Berechnung (Subsection)' := num_id);
dociv.(Projekte := proj_id_num);
dociv.(Typ = text(1));

 

Danke schonmal und Liebe Grüße,

Elena 

5 Antworten

null
    • ROP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo elena,

    zu 2.

    funktioniert bei mir so, wenn 1 die Feld-ID ist und nicht der Auswahltext:

    dociv.(Typ := 1);

     

    LG

    Ronald

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Elena, mir ist das Datenmodell nicht ganz klar. Ich interpretiere die Beschreibung so, dass die Tabelle 'Projekte* jeweils N:1 mit 'Berechnungen' und 'Tasks' verknüpft ist. Und dass beim Erstellen einer neuen Verknüpfung in 'Berechnungen' automatisch auch ein mit demselben Projekt verknüpfter Datensatz in 'Tasks' erstellt werden soll. Dann könnte der On-create-Trigger in 'Berechnungen' so aussehen:

     

    let projekt_id_num := Projekte;
    let dociv := create Tasks;
    dociv.(Projekte := project_id_num);
    dociv.(Typ := 1)

     

    Das funktioniert natürlich nur, wenn die Verknüpfung zu 'Berechnungen' auch tatsächlich aus der Tabelle 'Projekte' heraus mit "Neuer Datensatz" erzeugt wird. Ansonsten ist die Verknüpfung zu 'Projekte' ja leer.

     

    Nun soll mit den beiden Zeilen

     

    let num_id := number(substring(string(Id), 1, length(string(Id))));

     

    und

     

    dociv.('Link zu Berechnung (Subsection)' := num_id);

     

    aber offenbar auch noch eine Verknüpfung zwischen 'Tasks' und 'Berechnung' hergestellt werden. Was eine technische N:1-Verbindung zwischen den Tabellen 'Berechnungen' und 'Tasks' voraussetzen würde. Wenn die gegeben ist, dann könnte man den On-create-Trigger wie folgt erweitern (erste und letzte Zeile ergänzt):

     

    let num_id := this;
    let projekt_id_num := Projekte;
    let dociv := create Tasks;
    dociv.(Projekte := project_id_num);
    dociv.(Typ := 1)
    dociv.('Link zu Berechnung (Subsection)' := num_id)

     

    Das 'Link zu Berechnung (Subsection)' habe ich jetzt einfach übernommen in der Annahme, dass es der (geänderte) Name der Verknüpfung zu 'Berechnungen' ist.

     

    Grundsätzlich: Bei Verknüpfungen wird immer die interne ID des Datensatzes angegeben. Safür hat Ninox einen eigenen Datentyp. Die ID des aktuellen Datensatzes kann immer mit "this" ermittelt werden. Das Konstrukt mit "number(substr(..." ist nicht nur überflüssig, es bringt auch ein falsches Ergebnis.

    • ROP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Planox,

    ich habe das bei mir mal nachgebaut, da mich das auch interessiert.

    Allerdings bekomme beim Einfügen des Skripts ("Bei neuem Datensatz folgendes Skript ausführen" in Tabelle Berechungen):

    let projekt_id_num := Projekte;
    let dociv := create Tasks;
    dociv.(Projekte := project_id_num);

    diese Fehlermeldung:

     

    hier noch die 2 Tabellen-Felder Berechnungen und Projekte:

     

    Wo habe ich da noch einen Fehler drin?

    Denn die Meldung ist ja Richtig, da das Feld Projekte ja kein Datenfeld sondern eine Verknüpfung ist...

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Ronald, auf die Schnelle: Ich bin wie gesagt von N:1-Verbindungen zwischen 'Projekte' und 'Berechnungen' bzw. 'Tasks' ausgegangen. Bei dir scheint es umgekehrt zu sein (zu erkennen an dem dicken Pfeil nach links vor "Projekte" in der Feldliste). Und dann bekommt man statt einer ID ein Array mit IDs zurück (auch, wenn es nur eine enthält). Rein technisch könnte man die Fehlermeldung bei dir wahrscheinlich mit "let projekt_id_num := first(Projekte)" vermeiden, weil das Ergebnis dann wieder nur EINE bestimmte ID wäre. Allerdings vermute(!) ich wie gesagt, dass die Verknüpfung bei Elena anders herum gedacht ist: Ein Projekt, mehrere Berechnungen. 

     

    Grüße - Axel

    • ROP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Axel,

    vielen Dank für deine schnelle Antwort.

    Ich habe die Verknüpfungen jetzt mal andersherum gemacht, dann gibt es keine Fehlermeldung mehr aber es wird nur ein leerer Datensatz in Tasks erzeugt.

    Da fehlen mir noch Angaben von Elena, wie das ('Link zu Berechnung (Subsection)' gemeint ist.

     

    Schönen Tag dir noch,

    VG Ronald

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 5Antworten
  • 440Ansichten