0

Tabelle mit Verknüpfungen per Schleife befüllen

Hallo liebes Forum,

ich habe folgendes Problem: Ich will aus der Tabelle "Kunstwerke" jene Datensätze, die ich vorher markiert habe (durch die Felder "Schleifen-Datum" (Datumsfeld) und "Werkgruppennummer (dynamisches Auswahlfeld)), in die Tabelle "Werkgruppenbeziehung" per Schleife schreiben. Die Tabelle besteht nur aus zwei Tabellenverknüpfungsfeldern: 1. Werkgruppen; 2. Kunstwerke. Folgenden Code habe ich erstellt:

let myArtwork := this;
let myDateSchleife := format('Datum-Schleife', "DD.MM.YYYY");
let myWGSchleife := record(Werkgruppen,number('Werkgruppe-Schleife'));
let myAnzahlDaten := cnt(select Kunstwerke where Werkgruppennummer = myWGSchleife and 'Schleifen-Datum' = myDateSchleife);
let neu := (create Werkgruppenbeziehung);
let myAntwort := dialog("Kunstwerke per Schleife Werkgruppen zuordnen", "Sollen wirklich alle Kunstwerke mit der Werkgruppenauswahl: " + myWGSchleife + " dieser Werkgruppe zugeordnet werden?" + " Es werden insgesamt " + myAnzahlDaten + " Datensätze verarbeitet!", ["Ja", "Nein"]);
if myAntwort = "Ja" then
for i in select Kunstwerke where Werkgruppennummer = myWGSchleife and 'Schleifen-Datum' = myDateSchleife do
alert("Ordne Kunstwerk der Werkgruppe " + myWGSchleife + " zu: Ninox Nr. " + i.Nr + ": " + i.'Kurztitel Mergefeld-Text');
i.neu.(Werkgruppen := myWGSchleife;
Kunstwerke := myArtwork)
end;
void
end

Allerdings meckert Ninox bei Zeile 11 "Kunstwerke := myArtwork". Hier gibt es die Fehlermeldung: "Expression does not return a record id of table 'Kunstwerke': myArtwork in Zeile 11.
Stehe leider auf dem Schlauf, wie das zu lösen ist und danke für jegliche Hilfe!
Viele Grüße

7 Antworten

null
    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    nimm doch mal ein Funktionsfeld und teste was 

     

    let myArtwork := this;

    myArtwork

     

    Ich würde es mal mit 

     

    let myArtwork := number(this);

    veruchen, damit solltest Du eine Datensatz-ID  heraus bekommen...

     

    überhaupt ausgibt...

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Oh, verdrehte Sätze, auch nett :)

    • neon_carriage
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo, danke für den Hinweis! Das bringt mich schon mal etwas weiter. Es kommt zumindest keine Fehlermeldung mehr, aber Ninox legt lediglich in der Tabelle Werkgruppenverknüpfung die Verknüpfung zur Werkgruppe selbst an, aber die Verknüpfung zum Kunstwerk wird nicht gemacht, warum auch immer. Merkwürdig ist auch, dass im Verknüpfungsfeld dennoch irgendetwas ist (das Symbol rechts um die Verknüpfung aufzuheben erscheint) und wenn ich darauf klicke, kommt eine komplett leere Eingabemaske.

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Setze doch mal Kunstwerk fest auf eine ID, zb let myArtwork := 15...

    Was passiert?

    Laut deinem obigen Code holt er sich mit let myArtwork := number(this) ja die Datensatz-ID aus dem Datensatz heraus, aus dem Du den Code ausführst... Du hast aber wechselnde Kunstwerke, daher muss das let myArtwork := number(this) innerhalb der i-Schleife stehen:

     

    for i in select Kunstwerke where Werkgruppennummer = myWGSchleife and 'Schleifen-Datum' = myDateSchleife do
    alert("Ordne Kunstwerk der Werkgruppe " + myWGSchleife + " zu: Ninox Nr. " + i.Nr + ": " + i.'Kurztitel Mergefeld-Text');

    i.(

    let myArtwork := number(i);

    neu.(Werkgruppen := myWGSchleife);
    neu.(Kunstwerke := myArtwork)

    )
    i.
    end

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    das untere i. ist zuviel

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

    Hallo, ich verstehe ehrlich gesagt nicht, was das Skript genau machen soll, aber beim Überfliegen ist mir aufgefallen, dass das Datumsfeld 'Schleifen-Datum' mehrfach mit der Variable 'myDateSchleife' verglichen wird, die nach der Zuweisung in Zeile 2 aber einen String im Format "DD.MM.YYYY" enthält.

     

    Zweite Sache: Wenn die Tabelle 'Werkgruppenbeziehung' eine N:M-Verknüpfung abbilden soll, dann müsste das "create" auch für jeden betreffenden Datensatz, also innerhalb der Schleife ausgeführt werden.

     

    Aber - wie gesagt: Vielleicht interpretiere ich das Problem auch falsch.

    • neon_carriage
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ganz herzlichen Dank an Beide! Die Kombination aus beiden Antworten hat geklappt. Wirklich Spitze, die Hilfe hier im Forum!
    Ich versuche die Funktion nochmals besser zu erklären, vielleicht hilft es ja auch anderen.

    Ich habe in einer Tabelle Kunstwerke und möchte hier mehrere Kunstwerke auswählen und zu einer Werkgruppe hinzufügen (z.B. für Ausstellungen oder Messen etc.). Da es hier manchmal um mehrere hundert Stück geht, will ich die nicht einzeln über eine dritte Tabelle (Werkgruppenbeziehung, für die N:M-Verknüpfung) anlegen und auch nicht per Button bei jedem einzelnen Kunstwerk, sondern über einen Dashboard-Button gebündelt. Hierfür ordne ich per Massenbearbeitung allen vorher ausgewählten 200 oder 300 Kunstwerken eine Werkgruppe per Dropdownfeld zu und ein Datum (doppelt hält besser!) und lasse diese nun per Schleife automatisch über die N:M-Verknüpfung in die jeweilige Werkgruppe aufnehmen.
    Die doppelte Abfrage des Datums dient bei mir nur dazu, dass ich im Anzeigentext des popup-dialogs angezeigt bekomme, wie viele Datensätze bearbeitet werden um einen ungefähren Überblick zu haben, ob das auch korrekt ist oder ob aus Versehen z.B. der Gesamtbestand verarbeitet wird...

    Ich habe jetzt die let myArtwork-Abfrage in die Schleife gestellt und ebenso  let neu-Create funktion und es klappt einwandfrei.

    Vielleicht ist das aber alles auch zu kompliziert gedacht und es gibt einen einfacheren Weg. Jetzt bin ich aber erstmal froh, dass es klappt!
    Schönen Abend an Alle!

Content aside

  • vor 3 JahrenZuletzt aktiv
  • 7Antworten
  • 656Ansichten