„Massendatenänderung" in Tabelle per Befehlsschaltfläche
Mahlzeit,
folgendes habe ich vor:
Es es existiert eine Tabelle Teilnehmer und eine Tabelle Interessenten. Dazu noch eine Tabelle Kontakte, die mit 1:N mit diesen beiden Tabellen verknüpft ist.
Wenn ich jetzt eine E-Mail (außerhalb von Ninox) an alle Beteiligten der beiden Tabelle Teilnehmer und Interessenten versende, möchte ich jeweils einen Eintrag in der Tabelle Kontakte erzeugen. Und das über eine Befehlsschaltfläche auf dem Dashboard.
Ich habe auch schon einmal angefangen, komme aber leider nicht so wirklich weiter. Das sind die Felder in Kontakte
Es sollen also alle Datensätze aus Tabelle Teilnehmer und Interessenten (hier habe ich noch ein Ja/Nein-Feld Kontaktverbot) genommen werden und die Felder in Kontakte gefüllt werden:
- Datum
- Saison (kann aktuell z.B. 2019 oder 2020 betreffen)
- E-Mail Out (Auswahlfeld Kontakt)
- Bemerkung (z.B. Einladungs-E-Mail, Abrechnung etc.)
Optimal wäre es natürlich, wenn ich die fetten Felder vorher - oder dabei - noch festlegen könnte.
Wie kann ich denn so etwas realisieren?
Danke euch und sonnige Grüße
Markus
12 Antworten
-
Wenn ich dich richtig verstehe, möchtest du für jeden Teilnehmer/Interessenten dokumentieren, welchen Nachrichten du ihnen hast zukommen lassen?
Wenn ja, braucht es hier ein NN Verbindung, denn eine Nachricht, geht an mehrere Teiln/Int und jeder Teiln/Int bekommt mehrere Nachrichten.
Habe deine Anwendung vereinfacht nachgebaut, wie ich sie verstanden habe:
Also im Dashboard kannst du nun Datum und beliebige Felder vorausfüllen.
Welche Teilnehmer diese Nachricht bekommen haben, solltest du in den jeweiligen Listen vorher auswählen.
Im Dashboard habe ich dann noch eine Ansicht (select Kontakt, mit der Liste der Nachrichten und an wenn sie gegangen ist). Das macht bei einer grösseren Anzahl Teilnehmern keinen Sinn mehr, zum testen ist es gut
Dann der Go Button.... dieser enthält folgenden Code
let xDate := Datum;
let xText := Text;
let n := (create Kontakt);
n.(Datum := xDate);
n.(Text := xText);
for i in (select Teilnehmer)[Verteiler = true] do
let k := (create 'NN:Kontakt_Teilnehmer');
k.(Teilnehmer := i.Nr);
k.(Kontakt := n.Nr)
end;
for i in (select Interessenten)[Verteiler = true] do
let l := (create 'NN:Kontakt_Interessenten');
l.(Interessenten := i.Nr);
l.(Kontakt := n.Nr)
end;
Datum := null;
Text := null;
Dieser legt als erstes eine Nachricht an mit den Inhalten des Dashboard (welche am Ende gelöscht werden). Dann legt er in Schleifen alle Datensätze in den NN Tabellen an und verknüpft in Abhängigkeit vom Verteilerstatus die jeweilige Person mit der Nachricht.
Unter Kontakt siehst du dann, wer alles die Nachricht erhalten hat, und unter dem Teiln/Int, welche Nachrichten er bekommen hat
Ich hoffe, das hilft und ich habe nicht voll am Thema vorbei gedacht ;)
-
-
Idee, baue dir eine Kanban Ansicht, So kannst du sehr schnell einen aktuellen Überblick deines Veteilers habe und schnelle Änderungen vornehmen
-
Moin Dan,
sehr cool, auf diesen Ansatz mit NN wäre ich ja nie gekommen. Besten Dank für deine Mühe!
Es sieht so als, als wenn du nicht am Thema vorbeigedacht hast Ich muss das nur noch für mich ordnen und versuchen um- bzw. einzubauen und hoffe, dass ich dich da richtig verstehe, was zu tun ist:
1. Ja/Nein-Feld „Verteiler" in Teilnehmer und Interessenten hinzufügen, als Schalter, wer die Nachricht bekommen hat. Das bedeutet, dass ich dort vorher den Schalter auf JA setze (ggf. mit Massenänderung), damit der Kontakt eingetragen werden kann.
wäre das nicht auch sinnvoll nach Abarbeiten der Schleife, den Schalter wieder auf NEIN zu setzen?
2. Auf dem Dashboard müsste ich dann die entsprechenden Datenfelder anlegen?
- Datum
- Saison
- Auswahlfeld Kontakt
- Bemerkung3. Anlage der NN-Hilfstabelle
ich gehe mal davon aus, dass ich dann auch bei beiden Tabellen die 4 Felder anlegen muss?
- Datum
- Saison
- Auswahlfeld Kontakt
- BemerkungOder wie sind die Datenfelder aufgebaut?
Mein Datenmodell sieht jetzt auch so aus
Was mir gerade noch nicht so ganz klar ist, woher in dem Code für den GO-Button das Feld „Nr" kommt. Ist das die Ninox-ID von den NN-Tabellen?
Habe ich dich da richtig verstanden?
Viele Grüße
Markus -
Du bist auf einem Guten Weg, nun zu deinen Fragen ...
(1) das hängt ganz von deinem Workflow ab ob du jedes Mal von vorn den Verteiler anlegen willst ... wenn ein Teilnehmer einer Gruppe (ein Merkmal hat) angehört, kannst du im Dashboard ebenfalls einen Button machen, der sagt "setze alle Teilnehmer auf ja, die dieses Kriterium erfüllt"
Beispiel Teilnehmer Gruppe A
ein Feld-Text Property ein Feld Value. Property -> "Gruppe". Value -> "A"
let p = Property;
let v = Value;
select Teilnehmer [p = v].Verteiler := true;
ACHTUNG, hier müsste man noch ein ExceptionHandling einbauen, Falls du die Eingaben zu keinem Ergebnis führen!
(2) bis auf das Auswahlfeld Kontakt, ja .... alles Felder müssen im Dashboard und Kontakt vorhanden sein ... Der Button schreibt dann die Werte vom Dashboard in Kontakte
(3) die NN Tabellen erhalten NUR die Verweise auf Kontakt und Teilnehmer... Du speicherst also nur einmal die Info und der GO Button schreibt erst die Daten einmal in Kontakte, dann legt er die Datensätze für die Teilnehmerliste in der NN Tabelle an .... für jeden Teilnehmer mit JA einen Datensatz je mit der Nr (richtig Ninox ID der Datensatzes) ID Teilnehmer und ID Kontakt... NN speichert also nur zwei "Adressen" ... Wie du gesehen hast, kannst du nun in der NN Tabelle im Formular aber alle Daten aus beiden Tabellen anzeigen lassen, ohne alles doppelt und dreifach zu speichern. Habe leider schon mein Beispiel gelöscht ...
-
Hi Dan,
danke für die Erläuterungen, es lichtet sich langsam der Nebel
Stimmt eigentlich, der Verteiler könnte für die Massenverarbeitung eigentlich immer auf „JA" stehen - ist deutlich weniger Arbeit.
Dann werde ich mich heute Nachmittag mal mit der Umsetzung befassen. Könnte also sein, dass ich mit der ein oder anderen Rückfrage nochmal auf dich zukomme
Schönen Tag
Markus
-
Hallo Dan,
wollte dir noch ein kurzes Feedback zu deiner Lösung geben: die funktiioniert 1A
Nachdem ich es zuerst in meiner Backup-Produktiv-Datenbank versucht habe und es dort noch nicht so wirklich klappt, habe ich es in klein nachgebaut. Und da funktioniert alles, wie ich es mir gedacht habe.
Da ich die Funktionalität auch verstanden habe, sollte es mir gelingen, den Fehler in der Produktiv Datenbank zu finden.
Besten Dank nochmal für deine Hilfe
Viele Grüße
Markus -
spitze
-
Nabend Dan,
in meiner Produktiv-Datenbank klappt es jetzt auch.
Nochmal zurück zu Deinem Hinweis unter Punkt (1):
(1) das hängt ganz von deinem Workflow ab ob du jedes Mal von vorn den Verteiler anlegen willst ... wenn ein Teilnehmer einer Gruppe (ein Merkmal hat) angehört, kannst du im Dashboard ebenfalls einen Button machen, der sagt "setze alle Teilnehmer auf ja, die dieses Kriterium erfüllt"
Beispiel Teilnehmer Gruppe A
ein Feld-Text Property ein Feld Value. Property -> "Gruppe". Value -> "A"
let p = Property;
let v = Value;
select Teilnehmer [p = v].Verteiler := true;
ACHTUNG, hier müsste man noch ein ExceptionHandling einbauen, Falls du die Eingaben zu keinem Ergebnis führen!
Ich würde mir gerne einen Button auf dem Dashboard einrichten, durch den ich bei allen Teilnehmer oder Interessenten, bei denen das Ja/Nein-Feld bei Kontaktverbot auf NEIN steht und die sich bereits für die neue Tipprunde angemeldet haben, das Ja/Nein-Feld bei T-Verteiler auf NEIN setzen kann. Damit kann ich eine Erinnerungs-Mail nur noch an die noch nicht Angemeldeten versenden.
Die beiden Ja/Nein-Felder befinden sich in der Tabelle "Teilnehmer" und die Anmeldung bekomme ich mit der Zeile heraus
select 'Kicktipp Saison' where Saison = 2020
Mit deinem Beispiel komme ich nur noch nicht so wirklich klar, meine Versuche sind bisher leider auch alle gescheitert.
Und was bedeutet in dem Zusammenhang ExceptionHandling
Viele Grüße
Markus -
also ohne Datenmodell ist das für mich immer schwer..woher kommt die Tabelle Kicktipp Saison?
Dashboard Button müsste so aus sehen (allerdings ohne es testen zu können)
select Teilnehmer [Kontaktverbot = false and *Tipprunde=true].(Verteiler:=true)
*das Kriterium ist nur der Platzhalter ... sollte Kicktippsaison eine Verknüpfung zu Teilnehmer haben, dann könnte es so aussehen
select Teilnehmer [Kontaktverbot = false and 'Kicktipp Saison'.Saison = 2020 ].(Verteiler:=true)
mit Exception Handling meine ich eine Fehlerabfrage...Sollte ein Kriterium per Hand eingegeben worden sein und die Schreibweise nicht exakt genug sein, führen solche Abfragen schnell ins leere.
Ich hoffe, dass ich helfen konnte ...
-
Ich denke mal, dass ich damit schon ein gutes Stück weiterkomme.
Kicktipp Saison ist tatsächlich mit Teilnehmer verknüpft, das Datenmodell hatte ich in der Antwort auf deinen ersten Post angefügt, ich hätte es vielleicht noch erwähnen können
-
wie müsste denn eine solche Fehlerabfrage aussehen? Im Forum habe ich zu beiden Begriffen leider nichts gefunden
Content aside
- vor 4 JahrenZuletzt aktiv
- 12Antworten
- 1408Ansichten