Chechbox mit Script-Direkt Button verknüpfen

Hallo Leute,
ich habe eine Ansicht „Mitarbeiter“, „Literatur“ und „Literaturzuordnung“, alle miteinander relational verbunden.
Wenn ich in der Literaturansicht auf „Literatur verleihen“ klicke, öffnet sich die Literaturzuordnung wo ich das Buch und den Mitarbeiter plus Datum auswählen kann. Funktioniert alles.
Die Verknüpfungen sieht man dann in den jeweiligen Containern.

Jetzt habe ich eine Checkbox in der Literaturansicht „Literatur verfügbar“ und ich möchte, dass das dort gesetzte Häkchen automatisch rausgeht, wenn jemand dieses Buch über „Literatur verleihen“ ausleiht.
Andersherum möchte ich einen Button in der Mitarbeiteransicht über dem Container, der „Literatur zurückgeben“ heißt und das Häkchen wieder setzt wenn man diesen betätigt und den entsprechende Datensatz im Container angewählt hat.

Kann mir jemand bei der Geschichte mit der automatisierten Checkbox helfen bzw. kurz sagen, ob das überhaupt möglich ist mittels Script-Direkt?

Vielen Dank.

Hallo „F“,

zunächst mal ganz allgemein: ein logisches Feld (optisch durch eine
Checkbox in der Eingabemaske visualisiert) lässt sich per
SetContentsByName( …, „1“) setzen und per SetContentsByName( …, „0“)
löschen. Diese Methode gibt es für die Eingabemaske (InputForm Objekt)
oder für einen Datensatz (Record Objekt). Der Unterschied zw. beiden
Objekten besteht darin, dass wenn du über die Eingabemaske gehst, der
Datensatz nicht gespeichert sein muss, du „simulierst“ praktisch den
Klick auf die Checkbox seitens eines Benutzers.

Für deinen Anwendungsfall kannst du den Datensatz des betreffenden
Buches heraussuchen (SetFilter…) und dann per SetContentsByName() den
Wert setzen/löschen und den Datensatz dann speichern. Ggf. musst du die
Buch-Ansicht noch aktualisieren, damit sich dies auch optisch auswirkt -
du machst das ganze ja „von hinten“ in der Datenbank.

Andersherum möchte ich einen Button in der Mitarbeiteransicht über
dem Container, der „Literatur zurückgeben“ heißt und das Häkchen
wieder setzt wenn man diesen betätigt und den entsprechende Datensatz
im Container angewählt hat.

Du kannst per Script nicht herausbekommen, welches der aktuell
selektierte Datensatz in einem Container ist.

Du musst also den Button in die Literaturzuordnung-Eingabemaske
reinmachen und darin dann wie oben geschildert das logische Feld beim
Buch zurücksetzen und den Zuordnungsdatensatz (auf dem du ja gerade
„stehst“) löschen. „Kostet“ den Anwender halt noch den Doppelklick auf
das zurückzugebende Buch im Container, aber das geht halt nicht anders.

ABER überdenke dein Design: Du hast hier redundante Informationen und
das ist immer heikel. Redundant, weil ja die reine Existenz eines
Zuordnungsdatensatz bereits bedeutet, dass das Buch ausgeliehen ist
(sofern die Zuordnung bei Rückgabe gelöscht wird), die Checkbox enthält
dieselbe Information, d.h. die Info ist „doppelt“. Wehe, die Info ist
nicht immer synchron! (Z.B. der Benutzer klickt nicht den vorgesehenen
Button, sondern macht das „manuell“, es werden eines Tages per Import
„Ausleihen“ eingepflegt, oder ein Benutzer klickt einfach die Checkbox
an, löscht aber Ausleih-Datensatz gar nicht, oderwasweissich.)

Du solltest dir überlegen, ob du nicht lieber eine Datenbanksicht
spendierst, welche per EXISTS Unterabfrage dir diese Info autom. besorgt
und als Spalte „einblendet“. Dann haste auch die vorgenannte Scripting
Baustelle mit der Checkbox nicht mehr.

Gruß

Alex.


CRM-Leitsatz: „Das einzige, was wirklich stört, ist der Kunde!“ :wink:

Hallo Alex,

ich danke dir für die ausführliche, nützliche Antwort.
Ich weiß was du meinst und sehe ein, dass du Recht hast. Kannst du den Punkt mit dem „EXISTS“ bitte noch etwas erläutern, wie mache ich das, ist das ein Befehl im cRM oder ein Script?
Ursprünglich wollte ich auch die Datensätze immer bestehen lassen so dass man nach ner Zeit sehen kann, wer wann welches Buch ausgeliehen hat.
Kann man vielleicht einmal einen Container machen, wo immer nur der aktuell ausgeliehene Datensatz drin ist, den mit dieser EXISTS Abfrage versehen und zusätzlich noch einen weiteren Container hinzufügen, der ohne weitere Funktion alle bisherigen Datensätze im ersten Container anzeigt?

Gruß
Florian :wink:

Hallo „F“,

zunächst mal ganz allgemein: ein logisches Feld (optisch durch eine
Checkbox in der Eingabemaske visualisiert) lässt sich per
SetContentsByName( …, „1“) setzen und per SetContentsByName( …, „0“)
löschen. Diese Methode gibt es für die Eingabemaske (InputForm Objekt)
oder für einen Datensatz (Record Objekt). Der Unterschied zw. beiden
Objekten besteht darin, dass wenn du über die Eingabemaske gehst, der
Datensatz nicht gespeichert sein muss, du „simulierst“ praktisch den
Klick auf die Checkbox seitens eines Benutzers.

Für deinen Anwendungsfall kannst du den Datensatz des betreffenden
Buches heraussuchen (SetFilter…) und dann per SetContentsByName() den
Wert setzen/löschen und den Datensatz dann speichern. Ggf. musst du die
Buch-Ansicht noch aktualisieren, damit sich dies auch optisch auswirkt -
du machst das ganze ja „von hinten“ in der Datenbank.

Andersherum möchte ich einen Button in der Mitarbeiteransicht über
dem Container, der „Literatur zurückgeben“ heißt und das Häkchen
wieder setzt wenn man diesen betätigt und den entsprechende Datensatz
im Container angewählt hat.

Du kannst per Script nicht herausbekommen, welches der aktuell
selektierte Datensatz in einem Container ist.

Du musst also den Button in die Literaturzuordnung-Eingabemaske
reinmachen und darin dann wie oben geschildert das logische Feld beim
Buch zurücksetzen und den Zuordnungsdatensatz (auf dem du ja gerade
„stehst“) löschen. „Kostet“ den Anwender halt noch den Doppelklick auf
das zurückzugebende Buch im Container, aber das geht halt nicht anders.

ABER überdenke dein Design: Du hast hier redundante Informationen und
das ist immer heikel. Redundant, weil ja die reine Existenz eines
Zuordnungsdatensatz bereits bedeutet, dass das Buch ausgeliehen ist
(sofern die Zuordnung bei Rückgabe gelöscht wird), die Checkbox enthält
dieselbe Information, d.h. die Info ist „doppelt“. Wehe, die Info ist
nicht immer synchron! (Z.B. der Benutzer klickt nicht den vorgesehenen
Button, sondern macht das „manuell“, es werden eines Tages per Import
„Ausleihen“ eingepflegt, oder ein Benutzer klickt einfach die Checkbox
an, löscht aber Ausleih-Datensatz gar nicht, oderwasweissich.)

Du solltest dir überlegen, ob du nicht lieber eine Datenbanksicht
spendierst, welche per EXISTS Unterabfrage dir diese Info autom. besorgt
und als Spalte „einblendet“. Dann haste auch die vorgenannte Scripting
Baustelle mit der Checkbox nicht mehr.

Gruß

Alex.


CRM-Leitsatz: „Das einzige, was wirklich stört, ist der Kunde!“ :wink:

Hi Florian,

Kannst du den Punkt mit dem „EXISTS“ bitte noch etwas erläutern, wie
mache ich das, ist das ein Befehl im cRM oder ein Script?

das ist ein SQL Befehl und du benutzt ihn als Teil des WHERE Statements
(einer freien SQL Abfrage) Guck mal in der SQL Befehlsreferenz nach.
(aber lies zuerst hier weiter! :slight_smile: )

Ursprünglich wollte ich auch die Datensätze immer bestehen lassen so
dass man nach ner Zeit sehen kann, wer wann welches Buch ausgeliehen
hat.

Dann würde ich das Modell umstellen:

Jedes Buch hat eine 1:1 Verknüpfung zu den Personen („aktuell
ausgeliehen durch“), dann kannste dir auch die EXIST Abfrage oben
sparen, denn allein die Tatsache, dass das Feld
„AusgeliehenDurchPersonenID“ nicht NULL ist, besagt dann bereits, dass
es ausgeliehen ist (seit wann steht in einem „AusgeliehenSeit“ Feld).

Desweiteren hast du eine 1:N Relation auf eine Ansicht
„AusleihHistorie“. Darin erzeugst du beim Klick auf den Rückgabe-Button
(wo du danach auch „AusgeliehenDurchPersonenID“ und „AusgeliehenSeit“
auf NULL setzt) einen neuen Datensatz, der alle benötigten Felder
enthält (AusleihDatum, RückgabeDatum, PersonenID, BuchID).

Fertig. :slight_smile:

Gruss,

Alex.


CRM-Leitsatz: „Das einzige, was wirklich stört, ist der Kunde!“ :wink: