0

Verknüpfung mit Befehlsschaltfläche

Hallo zusammen,

 

ich bräuchte Support bei einer Verknüpfung.

 

Es gibt eine Tabelle "Anfragen" mit einigen Datenfeldern für Kontaktdaten der anfragenden Person und Details zur Anfrage. Bei erfolgreichem Abschluss der Anfrage lege ich einen neuen Kunden in der Tabelle "Kontakte" an. Dazu gibt es folgende Verknüpfung von Anfragen mit Kontakte (N:1)

 

Klick auf das + erzeugt einen neuen Kontakt inkl. Verknüpfung zum Anfrage Datensatz. Ich möchte jedoch die Befehlsschaltfläche verwenden, um gleich alle Datenfelder der anfragenden Person mitzunehmen. Mit folgender Formel funktioniert es prächtig, es fehlt jedoch die Verknüpfung zum aktuellen Datensatz Anfragen. Wie kriege ich die hier noch hinein?? myNew.(Anfragen := myID) akzeptiert Ninox nicht...

 

let myID := this;
let myAnrede := Anrede;
let myVorname := Vorname;
let myNachname := Nachname;
let 'myE-Mail-Adresse' := 'E-Mail-Adresse';
let myTelefon := Telefon;
let myNew := (create Kontakte);
myNew.(Art := "1");
myNew.(Anrede := myAnrede);
myNew.(Vorname := myVorname);
myNew.(Nachname := myNachname);
myNew.('E-Mail-Adresse' := 'myE-Mail-Adresse');
myNew.(Telefon := myTelefon);
popupRecord(myNew)

 

Danke für erhellende Ideen :) Christian

12 Antworten

null
    • Christian.7
    • vor 3 Jahren
    • Gemeldet - anzeigen

    ...kleiner Zusatz: bei der zweiten Verknüpfung zur Tabelle Ansprechpersonen klappt es wunderbar. Es ist aber auch eine 1:N Rückverknüpfung. Da liegt wohl der Haken.

    • RMS Immobilière
    • Arsene_Nickels
    • vor 3 Jahren
    • Gemeldet - anzeigen

    let CurrRec:=Nr  (als 1. Zeile)

    und vor dem popupRecord:

    myNew(Anfragen):=CurrRec

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

    Hallo Christian, die Verknüpfung muss auf der N-Seite erfolgen, also in der Tabelle 'Anfragen'. Nebenbei kann man sich übrigens auch die Zwischenspeicherung in Variablen sparen. Mein Vorschlag:

     

    let me := this;
    let myNew := (create Kontakte);
        me.Kontakte := myNew;
        myNew.(Art := "1");
        myNew.(Anrede := me.Anrede);
        myNew.(Vorname := me.Vorname);
        myNew.(Nachname := me.Nachname);
        myNew.('E-Mail-Adresse' := me.'E-Mail-Adresse');
        myNew.(Telefon := me.Telefon);
    popupRecord(myNew)

    • Christian.7
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Arsène,

    danke für den Tipp. Funktioniert leider nicht. Ninox sagt: Die Tabellenspalte ist kein einfaches Datenfeld: Anfragen

    Das bezieht sich auf die Zeile myNew.(Anfragen := CurrRec)

    • Christian.7
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,

    Megahammer!! Funktioniert tadellos!!!

    Tausend Dank.

    Ich habe jetzt auch die Art der Verknüpfung verstanden. Und diese Variante ohne die mühsamen Variablen erspart viel Tipperei.

    Ich schließe gleich noch eine zweite, etwas kniffligere Sache an und bin sehr gespannt, ob es dafür auch eine funktionierende Lösung geben kann :)

    Folgt in Kürze.

    vg, Christian

    • Christian.7
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hier die kniffligere Aufgabe:

     

    Auf dem Screenshot oben gibt es neben der ersten Variante "Kontakt neu" eine zweite "Ansprechperson neu". Kontakt neu erstellt einen neuen Kontakt mit Art = 1 = eine Person.

    Art = 2 in der Tabelle "Kontakte" = Firma. Dazu gehört eine Untertabelle "Ansprechpersonen", mit der ich mehrere Ansprechpersonen anlegen und eine davon als aktiv markieren kann, deren Daten dann in verknüpfte Felder der Tabelle "Kontakte" übernommen werden. Das Spiel mit dem Aktivieren von Ansprechpersonen aus der Untertabelle funktioniert einwandfrei und ist sehr praktisch.

     

    Nun möchte ich den aktuellen Datensatz "Anfragen" als neuen Record in "Ansprechpersonen" übertragen. Auch das funktioniert auch schon prächtig. Jetzt kommt die Aufgabe:

     

    Kann ich mit der selben Schaltfläche auch einen neuen Record in "Kontakte" anlegen, in den es das Feld 'Firma' aus "Anfragen" übernimmt und die erstellte Ansprechperson als aktiv übernimmt?

    Heißt: die Schaltfläche erzeugt einen Record in "Ansprechpersonen" und nimmt ein paar Felder dorthin mit und erstellt einen verknüpften Record in "Kontakte" als Firma, nimmt den Firmennamen aus "Anfragen" mit und markiert die neue Ansprechperson als aktiv.

     

    Verwirrend? Ja, find ich auch. Aber halt immer mal in meinem Workflow nötig. Bisher erstellt es mir nur eine neue Ansprechperson und ich muss dann die zugehörige Firma manuell erstellen. Keine große Sache, aber Ninox ist doch so leistungsfähig - wenn man weiß, wie es geht :)

     

    Jetzt bin ich aber mal extrem gespannt!

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

    Ja, das ist in der Tat etwas verwirrend. Mal sehen, ob ich es richtig verstanden habe:

     

    Es gibt die Tabelle 'Anfragen' und eine namens 'Kontakte' mit der Untertabelle 'Ansprechpersonen'?
    'Kontakte' enthält ein Auswahlfeld mit den Optionen "Person" und "Firma", außerdem ein Textfeld, in dem entweder ein Firmen- oder ein Personenname steht?
    Bei Auswahl "Person" soll der Name als Kontaktname angelegt werden (siehe oben). Bei "Firma" soll zusätzlich ein Eintrag in der Untertabelle 'Ansprechpersonen' erzeugt, dem Kontakt zugeordnet und als "aktiv" gekennzeichnet werden?

     

    Wenn ich die Aufgabenstellung halbwegs richtig erfasst habe, dann könnte die Lösung bspw. so (o. ä.) aussehen:

     

    let me := this;
    let newK := (create Kontakte);
    me.Kontakte := newK;
    newK.(Art := 2);
    newK.(Firma := me.Firma);
    let newA := (create Ansprechpersonen);
    newA.(Kontakte := newK);
    newA.(Aktiv := true);
    newA.(Vorname := me.Vorname);
    newA.(Nachname := me.Nachname);
    ... usw.
    popupRecord(newA)

     

    Wobei genau genommen noch geprüft werden müsste, ob nicht schon ein anderer Ansprechpartner dieser Firma als "aktiv" gekennzeichnet ist.

     

    Nebenbei: Warum sind die Kontakte überhaupt in zwei Tabellen getrennt? Wäre es nicht effizienter, beide in einer Tabelle zu speichern und bspw. über ein Statusfeld zu unterscheiden?

    • Christian.7
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Bis auf kleine Details völlig richtig verstanden. Ich bin ehrlich beeindruckt! Auch der Lösungsansatz enthält eine neue Erkenntnis für mich, nämlich, dass in einem Zug zwei neue Records in unterschiedlichen Tabellen erzeugt werden können und die auch noch verknüpft werden.

     

    Die vergangene Nacht habe ich sehr lange mit meiner Freundin Ninox verbracht, habe viel ausprobiert und wieder verworfen. Aber eine Lösung ist dabei rumgekommen: Es braucht 2 Tabellen, die über eine Mitteltabelle zu einer n:m Verknüpfung zusammenwachsen.

     

    Um die Sache ganz einfach zu verstehen, gibt es jetzt neue Tabellennamen:

    aus "Kontakte" wird "Kunden" und aus "Ansprechpersonen" wird "Kontakte" und dazu kommt eine neue Tabelle "M - Kunden - Kontakte"

    "Kontakte" enthält alle Kontaktpersonen mit zugehörenden Daten wie Name, Tel, E-Mail usw. aber ohne Kundennummer

    "Kunden" enthält alle Kunden, Art 1 = Person, Art 2 = Firma

    Kunde = Firma kann mehrere Ansprechpersonen haben = Kunden - Kontakte 1:N

    Eine dieser Ansprechpersonen kann gleichzeitig direkter Kunde sein = braucht einen separaten Datensatz für die selbe Person (deshalb 2 Tabellen) = Person ist einmal direkt Kunde/Person und gleichzeitig Mitarbeiter eines Kunden/Firma

     

    Frau Müller, Büroleiterin der Fa. Glück, fragt im Auftrag ihrer Chefin ein Inhouse Mentaltraining Seminar bei mir an. Anfrage landet in der Tabelle "Anfragen", Frau Müller in der verknüpften Tabelle "Kontakte". Aus der Anfrage wird erfreulicherweise ein Auftrag. Auftraggeber ist Fa. Glück. Also erhält "Kontakte" Frau Müller eine Verknüpfung zu einem neuen Record Fa. Glück in "Kunden" und wird meine Ansprechperson.

    Ihre Chefin Frau Meier erfährt, dass es klappt mit dem Seminar und möchte mit mir in Kontakt treten. Die Fa. Glück in "Kunden" erhält eine weitere Ansprechperson in "Kontakte", die Geschäftsführerin Frau Meier. Rechnung geht an Büroleitung Frau Müller, d.h. sie ist für die Rechnungsstellung aktive Ansprechperson. Ein paar E-Mails gehen aber an GF Frau Meier, dann wird sie kurz mal aktiviert. Sorry Frau Meier für die etwas zweideutige Formulierung ;)

    Nach dem Inhouse Training ist Frau Meier begeistert von meiner Arbeit und bucht für sich selbst ganz privat ein Einzelcoaching, weil sie Stress in der Ehe hat. Dafür muss Frau Meier nun Kundin Person in "Kunden" werden. Sie ist nun sowohl GF der Fa. Glück = Ansprechperson in "Kontakte" als auch Privatkundin in "Kunden".

     

    Deshalb braucht es 2 Tabellen "Kunden" und "Kontakte", die nach der langen Nacht mit Ninox jetzt eine n:m Verknüpfung erhalten. Ein Kontakt kann dann mit einer Anfrage verknüpft werden und/oder mit einem Kunden. Dazu kann ein Kontakt zusätzlich zum Kunden werden.

    Ob das alles innerhalb einer einzigen Tabelle zu machen wäre mit einem (Mehrfach)Auswahlfeld Kunde/Kontakt, ist mir grad nicht klar. Ich glaube nicht. Oder???

    Kann ein Record einer Tabelle mit anderen Records derselben Tabelle verknüpft werden und Datenfelder untereinander austauschen?

     

    Ninox beansprucht viel Zeit stelle ich fest... Schade, dass das Handbuch bzw. die Dokumentation so extrem lückenhaft und rudimentär ist. Danke an alle Pros hier im Forum, dass ihr so auskunftsfreudig Hilfestellung gebt!!!

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

    Hallo Christian, das mit der Erstellung von Datensätzen in mehreren Tabellen ist kein Hexenwerk. Rückgabewerte von Funktionen wie "this" und "create" sind immer die vollständigen IDs, bestehend aus einem (intern vergebenen) Buchstaben für die Tabelle und der Nummer des Datensatzes. Also bspw. "C/24". Diese ID speichert man in einer Variable. Mehr braucht es nicht, um über die Punktnotation auf die betreffenden Datensätze zugreifen und sie auch miteinander verknüpfen zu können.

     

    Zum Thema Datenmodell: Ich wollte dir keineswegs reinreden. Das ist ja das Schöne an Ninox: Jeder macht es so, wie es für ihn am besten passt.

     

    Aber da wir schon darüber reden: Wenn ich es richtig sehe, geht es im Grunde ja um klassische CRM-Funktionalität, also die Unterscheidung der Kontakte nach dem jeweiligen Status, z. B. Lead, Interessent, Kunde. Bei dir sind es eben nur zwei Stufen. Wenn ein Interessent (Anfrage) durch ein Angebot oder einen Auftrag zum Kunden wird, dann ändert sich der Status. Mir ist nicht klar, welchen Zweck die zweite Tabelle hat. Zumal du die Anfragen ja auch noch mit den Kunden verknüpfst und die Daten damit doppelt speicherst (sofern du sie nach der Übertragung zu 'Kunden' nicht manuell aus 'Anfragen' löscht).

     

    Man könnte statt dessen auch eine Tabelle für alle Kunden anlegen und dort ein Auswahlfeld mit den Optionen "Interessent" und "Kunde". Statt Vor- und Nachname nennt man die Felder "Name" und "Zusatz" (2. Zeile bei Firmen). Die Privatperson "Gerda Glück" und die Firma "Glück GmbH & Co. KG" wären halt zwei Datensätze, alle zusätzlichen persönlichen Kontaktdaten wie Vor- und Nachname, Telefon etc. kämen in die Untertabelle 'Ansprechpartner'.

     

    So habe ich es jedenfalls gemacht. Man spart sich halt das ganze Hin- und Herkopieren, vermeidet redundate Daten und muss nicht zwischen verschiedenen Tabelle switchen, wenn man mal schnell eine Telefonnummer oder sonstwas braucht (Fa. Glück läuft unter 'Kunden', Frau Glück noch unter 'Anfragen'). Kurzum: Man hat weniger technischen und organisatorischen Aufwand.

     

    Aber wie gesagt, das war nur als Anregung gedacht. Wenn es für dich anders besser funktioniert, dann bleib dabei und lass dich nicht belabern. ;)

    • Christian.7
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,

    reinreden ist erwünscht, weil angefragt. Und Du hast mir schon so viele tolle Lösungshilfen geschrieben, wofür ich laut Danke sage. Ninox ist toll und ich bin bisher auch sehr zufrieden damit. Nur braucht es entweder einiges an Fachwissen in Sachen Programmieren oder jemanden, der den ganzen Käse für einen macht. Daten eintragen ist dann die einfachste Aufgabe.

     

    Ich folge Deiner Anregung mit dem Auswahlfeld Interessent/Kunde. Beim Anlegen eines neuen Kontakts ist es erst mal ein Interessent. Erst durch den Statuswechsel zu Kunde wird eine Kundennummer erzeugt, heißt, dieser Trigger muss in dieses Auswahlfeld rein und nicht - wie jetzt - beim Erstellen eines neuen Datensatzes. Das war einer meiner Knoten. Wollte nicht unnötig Kundennummern verballern, wenn der anfragende Mensch noch kein Kunde ist und vielleicht auch nie einer wird.

    Die Untertabelle braucht es aber dennoch, aber nicht so kompliziert, wie bei meinem Ansatz. Oder?

     

    Und weil wir so schön labern... Kann man Dein Fachwissen auch intensiver nutzen? Sprich auch außerhalb dieses Forums ganz gezielt auf mein Ninox Modell ausgerichtet? Ist diese Frage hier im Forum überhaupt erlaubt, oder gibt's da Ärger?? Hab da noch so ein Ding mit Rechnungen und Angeboten, die sicherlich auch in eine Tabelle reinkönnen, ich jedoch die Trigger zur korrekten automatischen Vergabe der Rechnungs/Angebotsnummern nicht hinkriege. Für Dich sicherlich kleines Einmaleins...

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

    Du kannst mich gerne auch direkt ansprechen. Meine Kontaktdaten findest du unter https://copytexter.com/

    • Christian.7
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Danke für den Link. Ich habe jetzt erst mal Deine Anregungen umgesetzt. Es gibt nur eine einzige Tabelle "Kontakte", in der jetzt neu zwischen Kontakt/Kunde unterschieden wird. Ist sehr praktikabel.

    Wenn der Kopf zu stark raucht, melde ich mich gerne entweder hier im Forum, oder dann direkt an Deine Kontaktadresse.

    Herzlichen Dank an dieser Stelle! Christian