0

“ID erwartet” duplizieren von Untertabelle

Hallo,

ich versuche einen Eintrag mit seiner Untertabelle per Befehlschaltfläche zu duplizieren.

hier ist der Code:

let currRec := this.Nr;
duplicate(this);

for r in OrderItems do
let item := create(OrderItems);
end

Allerdings erhalte ich jetzt den Fehler: “ID Erwartet in der Zeile 5, Spalte 20”

Ich bin mir nicht sicher welche ID ich angeben soll oder wie die Syntax sein soll.

Ich freue mich über jeden Ansatz.

9 Antworten

null
    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Axel,

    so allgemein: ich würde in der Tabelle OrderItems die Verknüpfung zu der Tabelle Orders (wenn sie so heißt) bei Komposition auf Ja stellen. Dann werden die Rechnungspositionen bei duplicate(this) auch mit dupliziert. Ansonsten:

    ---

    let currRec := this;
    let newRec:=duplicate(this);
    for r in OrderItems do
    let newItem := create OrderItems;
    newItem.Order:=newRec;
    end

    ---

    Leo

    • Van Rothe GbR
    • Axel_Rothe
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo,

    habe mein Problem gefunden. Es war eine verwirrend benannte Variable: OrderItems und “Order Items”

    Danke für den Hinweis mit der Komposition!

    • Maurice
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo, hänge mich hier mal dran.

    Ich habe eine Tabelle Tab1 mit einem verknüpften Feld Tab2.Schuljahr. Schuljahr ist ein Zahlfeld, die Einträge der Form 202122 für Schuljahr 2021/22.  Es handelt sich dabei um eine Komposition. Ich möchte einen Datensatz duplizieren und dabei ein Schuljahr hochzählen. Mein Code:

    let nextSJ := Tab2.Schuljahr + 101;
    let d := duplicate(this);
    d.Tab2.(Schuljahr := nextSJ);
    popupRecord(d)

    Ich erhalte aber das gleiche Schuljahr wie vom Ausgnagsrecord. Nehme an, das liegt an der Komposition (kann nicht geändert werden). Gibt es da einen Trick?

    Grüße Maurice

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

    Hallo Maurice, wenn Tab2 eine Untertabelle (= Komposition) von Tab1 ist, dann enthält sie potenziell mehrere Datensätze. Man müsste in dem Fall angeben, aus welchem dieser Datensätze der Werte 'Schuljahr' gelesen werden soll. Falls bei allen Datensätzen der Untertabelle dasselbe Schuljahr eingetragen ist, könnte man es so versuchen:

     

    let nextSJ := first(Tab2).Schuljahr + 101;
    let d := duplicate(this);
    d.Tab2.(Schuljahr := nextSJ);
    popupRecord(d)

    • Maurice
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo planox,

    es ist umgekehrt: Tab1 ist Untertabelle von Tab2. Ändere ich das Schuljahr über den aufgeführten Befehl, bezieht sich diese Änderung auch auf den Ursprungsdatensatz, siehe auch:

    https://ninox.com/en/forum/technical-help-5ab8fe445fe2b42b7dd39ee7/duplicate-a-record-and-killing-related-records-etc.oh-and-jumping-to-that-new-record-5faffa45381f1d66cdd2fb05

    Ich habe keine Lösung gefunden, die die alten Einträge im Ursprungsdatensatz belässt und die Änderungen nur im neuen Datensatz vornimmt. Die Änderung war sogar fatal, da bei einer Komposition auch alle damit verbundenen DAtensatz geändert wurden. Das gab ein Riesendurcheinander.

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

    Hm, ich bin mir immer noch nicht ganz sicher, ob ich es richtig verstanden habe. Tab2 und deren Untertabelle Tab1 enthalten beide jeweils ein Feld 'Schuljahr'? Aus einem Datensatz von Tab1 heraus soll dieser nun mittels einer Schaltfläche dupliziert und der Wert 'Schuljahr' mit dem aus Tab2 + 101 gefüllt werden? Falls ja, dann würde ich es so versuchen:

     

    let nextSJ := Tab2.Schuljahr + 101;
    let newSJ := duplicate(this);
    newSJ.(Schuljahr := nextSJ);
    closeRecord();
    popupRecord(newSJ)

     

    Die Variable 'd' habe ich nur in 'newSJ' geändert, weil aus einem einzigen Buchstaben bestehende Bezeichnungen u. U. Probleme bereiten können (ncht: müssen).

     

    PS: Zum Entwickeln und Ausprobieren am besten immer mit einer Kopie der Produktiv-Datenbank arbeiten!

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Off-Topic:
    Da es hier häufiger zu Verständnisproblemen, was den Aufbau der DB zu einer konkreten Fragestellung kommt, ist es manchmal hilfreich eine Beispiel-DB zu dem Problem zur Verfügung zu stellen.
    Hier nun ein kostenloser Schweizer Anbieter: https://www.swisstransfer.com/de

    bei dem man die Beispiel-DB hochladen kann und den generierten DownloadLink für 14 Tage zur Verfügung stellt.
    Der Link ist nach dieser Zeit nicht mehr gültig und auch das File wird gelöscht.

    Es werden keine Anmeldedaten oÄ verlangt.

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ergänzung/Korrektur:
    30 Tage Gültigkeit Download-Link
    Endgültiges löschen der Datei 2 Monate nach dem Ende der Verfügbarkeit.

    • Maurice
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo,

    der Code von planox funktioniert nicht (er muss leicht ergänzt werden mit Tab2)

    let nextSJ := Tab2.Schuljahr + 101;
    let newSJ := duplicate(this);
    newSJ.Tab2.(Schuljahr := nextSJ);
    closeRecord();
    popupRecord(newSJ)

    Ich habe unter

    https://nx1749.your-storageshare.de/s/RmYR9ywLTk4XNpj

    für 7 Tage eine Beispiel-DB eingestellt. Dort unter Deputatsvergütungen findet man den entsprechenden Button.

    Grüße Maurice

Content aside

  • Status Answered
  • vor 2 JahrenZuletzt aktiv
  • 9Antworten
  • 533Ansichten