Archiv des Intrexx Live! Forums

Hier sehen Sie die Foreneinträge aus dem Intrexx Live! Forum. Bis November 2016 war es das Forum für alle Fragen rund um die Software Intrexx von United Planet.
Seit November 2016 gibt es ein neues moderiertes Forum, das Intrexx Community Forum. Nutzen Sie bitte unbedingt dieses für aktuelle Fragen, Antworten und Informationen.

Wichtig: Dieses Forum dient als Archiv. Die Einträge beziehen sich oft auf ältere Versionen von Intrexx und entsprechen nicht mehr den aktuellen technischen Gegebenheiten.
Daher sollten alle Inhalte ausschließlich von Experten genutzt werden. Bei unsachgemäßer Anwendung kann es zu zeitaufwändigen Problemen oder Datenverlust kommen.
Übersicht > Intrexx Professional: General Questions > Buttons mit DB Text befüllen

Buttons mit DB Text befüllen

Hallo zusammen,

ich erstelle gerade eine Verwaltungssoftware in Intrexx, in der alle möglichen Daten rund um Software erfasst werden.
Dazu gibt eine Datengruppe Software, sowie einige Unterdatengruppen mit Anhängen (z. B. Kontakte, Dokumente, etc. )

Die Bearbeitungsseite für Software ist über CSS und Javascript in mehrere Reiter aufgeteilt, die einzeln per Buttons aufgerufen werden können.
-> 1 große Seite - 7 Gruppierungen, von denen immer nur eine sichtbar ist.

Es gibt die Anforderung, die einzelnen Reiter zu markieren, wenn Inhalt vorhanden ist. Dazu habe ich Hilfsspalten in der Datenbank, die per Prozess nach einer Datengruppenaktion neu beschrieben werden, nach dem Shema "Kategorie (Anzahl Datensätze)", z. B. Dokumente (2). Die Buttons werden über eben diese Felder beschrieben, beim Aufruf der Seite.

Soweit funktioniert das, allerdings habe ich dabei 2 Probleme:

Problem 1:

Das Löschen Ereignis liefert einen falschen Wert.

Der Prozess dazu:

Datensatzereignis Unterdatengruppe mit Einfügen/Ändern/Löschen -> Groovy Aktion mit SQL COUNT(*) FROM (GUID U-DB) WHERE FKLID = <FKLID vom auslösenden Datensatz>
Also wieviel Datensätze in der Unterdatengruppe gibt es für den aktullen Software-Datensatz.

Beim Löschen ist der Wert falsch.

Habe ich keinen Datensatz und füge einen ein, kriege ich als Wert 1. Korrekt
Habe ich einen Datensatz und ändere diesen, kriege ich als Wert 1. Korrekt.
Habe ich einen Datensatz und lösche diesen, kriege ich als Wert 1. Falsch

Ursprünglich dachte ich, dass die eigentliche Datensatzaktion erst vervollständig wird, wenn der Prozess durchlaufen ist, aber dann müsste ich bei Einfügen ja als Wert 0 erhalten.

Gibt es dazu eine Lösung, abgesehen davon, dass ich das Löschen Ereignis separat behandle und pauschal 1 abziehe?

Problem 2:

Wir haben wie beschrieben mehrere Reiter. Ändere ich in der Unterdatengruppe einen Datensatz, wird die entsprechende Ansichtstabelle neu geladen, jedoch nicht die ganze Seite, damit man nicht laufend den Reiter wieder auswählen muss. Als Resultat wird zwar der neue Wert für die Buttons in die Datenbank geschrieben, aber nicht auf der Seite aktualisert.

Gibt es eine Funktion ähnliich MakeAppRequest, allerdings ohne Seite, sondern nur für einzelne Elemete (z. B. einen Button)?
Oder anders gefragt, kann ich per Javascript (oder sonst irgendwie) einen einzelnen Button erneut laden, ohne den Rest der Seite zu aktualiseren?


Viele Grüße und Danke
Weinschrod


EDIT:

Intrexx 7
SQL Datenbank
Windows Server 2008 R2
03.08.2016 10:47 von Weinschrod
Zu Problem 1: Ist denn die Abfrage an sich korrekt?
Muss das hinten nicht = ? heissen anstatt = <FKLID ?
Man kann auch mit einem Groovy-Handler auf das Löschen reagieren. Ein Action-Handler welcher vor dem Löschen/Speichern ausgeführt wird, kann mit SQL auf den Datensatz zugreifen bevor die Aktion ausgeführt wird.

Zu Problem 2:
In intrexx 8 gäbe es die Möglichkeit mit Embedded Tooltips oder der ix.loader-Bibliothek einzelne Teilbereiche der Seite nachzuladen.
Ansonsten könnte man den Wert auch per AJAX-Call abholen und den Titel des Buttons nachträglich setzen.
03.08.2016 12:04 von MartinW
Zu 1:

Den Code hatte ich nur sinngemäß zusammengefasst, sieht in real wie folgt aus:

def parent = g_record["F810978E4F3624AD9FC2E339439726B50DB53E06"].value

import de.uplanet.scripting.groovy.util.Safely

def conn = g_dbConnections.systemConnection
def stmt = null

try
{
stmt = g_dbQuery.prepare(conn, "SELECT COUNT(*) FROM DATAGROUP('AE8E77CD60F8672AA6962F0CE67F3811EBF0B42C') WHERE FKLID=?")
stmt.setInt(1, parent)

def value = stmt.executeAndGetScalarValue(0)

stmt = Safely.close(stmt)
}
finally
{
stmt = Safely.close(stmt)
}

def button_string = "Dokumente ("+value+")"

...

Update etc..


parent verweist dabei auf die FKLID von dem Unterdatengruppen-Datensatz, der das Ereignis ausgelöst hat. Sollte also an sich passen.
Den Action-Handler finde ich grad nicht, wär aber vermutlich auch unnütz, da ich ja nach dem Löschen zählen will.

Zu 2:

Intrexx 8 haben wir leider nicht, die AJAX-Variante wäre aber denkbar.
Werde mir das mal ansehen. Im Grunde kann es mir ja egal sein, ob Intrexx den Wert nachlädt, oder ich den Wert irgendwo hole und dann den Button manipuliere.
03.08.2016 12:18 von Weinschrod
parent ist die ID des aktuellen Datensatzes?
Dann würde ich das so machen:

def parent = Integer.parseInt(g_record.getRecId())

Ich kann es ehrlich gesagt nicht erklären aber ich habe mir das so angewöhnt.
Vermutlich gab es mal Probleme, weil das Feld mit der Guid nicht belegt war und die ID somit nur über getRecId() ausgelesen werden konnte.
03.08.2016 12:39 von MartinW
Nein parent ist die ID der Software

Software ( ID, .. )
--- Anhang Dokument ( ID, FKLID, ...)

Das Skript reagiert auf Aktionen in Anhang Dokument.
Im Skript ist parent die FKLID vom Dokument, ergo die ID von der Software, da ich nach dem Löschen alle Datensätze in Anhang Dokument zähle, die noch zu dieser Software gehören.

Mit deinem Vorschlag würde ich doch die ID von dem Dokument kriegen, das ich gerade lösche, oder?
03.08.2016 12:42 von Weinschrod
Genau, die ParentId kann man aber auch auslesen:

def parent = Integer.parseInt(g_record.getParentId()

03.08.2016 12:59 von MartinW
Auch nett zu wissen.

Führt in dem Fall aber zum gleichen Ergebnis. Nach dem Löschen wird dennoch eine 1 gezählt, obwohl kein Datensatz mehr vorhanden ist.
03.08.2016 13:25 von Weinschrod
Ich hoffe ich habe es richtig verstanden:

Wenn du zählen willst ohne deinen Datensatz der gelöscht wird musst du diesen aus deinem SQL ausschließen.
Das Löschen-Event wird vor dem eigentlichen Löschen ausgelöst.

Etwa so:
stmt = g_dbQuery.prepare(conn, "SELECT COUNT(*) FROM DATAGROUP('AE8E77CD60F8672AA6962F0CE67F3811EBF0B42C') WHERE FKLID=? AND LID <> ?")
stmt.setInt(1, parent)
stmt.setInt(2, deineDatensatzId)


Hoffe ich konnte helfen.
10.08.2016 09:19 von niko.kaul
Danke,

ich hab sowas vermutet, da man ja sonst schlecht noch auf die Inhalte zugreifen könnte im Prozess.

Hab's allerdings recht simpel gelöst und pauschal Eins abgezogen bei Löschen.


Weinschrod
10.08.2016 09:37 von Weinschrod
Zurück | Alles über Intrexx | Impressum | Datenschutzerklärung

Über United Planet
© 2019 United Planet GmbH
Schnewlinstraße 2
79098 Freiburg