Home Forum Nuclos Konfiguration Maskenlayouts Subform mit Selbstreferenz

Ansicht von 13 Beiträgen - 1 bis 13 (von insgesamt 13)
  • Autor
    Beiträge
  • #4596
    Markus Glitzner
    Teilnehmer

    Hallo!

    Ich habe eine Entität als Subform eingefügt, die auf sich selbst referenziert. Im Grunde funktioniert alles wie gewohnt, nur dauert das Öffnen der Suchmaske meistens recht lange und wenn es mal schneller geht, dann hängts bei den Comboboxen (erkennbar durch die Sanduhr, wenn man über eine Kombobox fährt und das Aufklappen nicht geht). Es sind keine bis nur wenige Datensätze in den referenzierten Entitäten. Auch erfolgen Datenbankseitig keine zusätzlichen Abfragen als sonst.

    Irgnedwo verrennt sich hier nuclos intern, das ist schön an der CPU Auslastung zu sehen. Gebe ich das Subform wieder raus, öffnet sich die Maske sofort und ohne Verzögerung.

    Gibt es hierzu eine Trick?

    Gruß
    Hugo

    #4602
    Ramin Goettlich
    Teilnehmer

    Hallo Hugo,

    vielleicht ist das ein Bug, wir sehen uns das genauer an.

    Grüsse,
    nuclosian

    #4629
    Thomas Pasch
    Teilnehmer

    Hallo Hugo,

    habe mir dein Problem mal angesehen (hat leider etwas länger gedauert), konnte es bei mir aber nicht nachstellen. Würde daher gerne einige weitere Informationen von dir bekommen:

    – Nuclos Version
    – Ist die Hauptentität eine Entität mit Statusmodell?
    – Ist die Subform Entität eine Entität mit Statusmodell?
    – Ungefähre Anzahl der Instanzen der Haupt- und Subformentität in der Datenbank
    – Benutzte Datenbankart und Version

    Mit besten Grüßen

    aanno

    #4630
    Markus Glitzner
    Teilnehmer

    Hallo!

    ab v3.1.3 und auch bei 3.2.0 beta nach dem Upgrade

    Die Entität hat in diesem Fall kein Statusmodell. Nachdem es sich um eine Referenzierung auf die eigene Entität handdelt, hat die Subform natürlich auch kein Statusmodell.

    Falls mit Instanzen die Anzahl der Datensätze gemeint ist: keine bis wenige

    SQL Server 2005, 2008 R2, jeweils 32 oder 64 bit, je nachdem auf welcher Nuclos Instanz. Das Verhalten ist auf allen gleich. Die Datenbank selber produziert auf jeden Fall nicht die Verzögerung (weder I/O noch CPU Auslastung), lediglich der Nuclos Service produziert die hohe CPU Auslastung und somit die Verzögerung.

    Noch zur Info: Gebe ich die Subform aus dem Layout raus, funktioniert alles wie gewohnt schnell. Am Layout gibt es noch weiter Ref Felder (Lieferanten, Artikel, Lagerorte, etc.) jeweils ohne Statusmodell aber meistens mit benutzderdefinierten VLP mit nicht allzu viel Datensätzen.

    Gruß
    Hugo

    #4635
    Thomas Pasch
    Teilnehmer

    Hallo Hugo,

    habe dein Problem mal auf einem SQL Server 2008 versucht nachzustellen (vorher hatte ich eine PostgreSQL DB verwendet). Leider kann ich es immer noch nicht nachvollziehen. Ich habe aber folgende Idee:

    Versuche doch mal im Layout die einzelnen ‚List of Values‘ (LOV) Spalten nacheinander auf ’nicht sichtbar‘ zu stellen. Dadurch können wir u.U. den ‚Schuldigen‘ herausbekommen und uns den genauer ansehen.

    Mit besten Grüßen

    aanno

    #4641
    Markus Glitzner
    Teilnehmer

    Hallo aanno!

    Ich denke ich hab das Problem gefunden, der Tipp mit den VLPs ging schon in die richtige Richtung. Allerdings liegt es nicht an den VLPs direkt, sondern am Subform, welches Rerferenzen zu Entitäten mit vielen Datensätze enthält (>10.000). Hatte jetzt auch bei einem anderen Layout dasselbe Problem und bin drauf gekommen, dass die Referenz zu meinen Artikel die Verzögerung auslöst. Habe mal alle Artikel gelöscht und siehe da, die Masken gehen zügig auf, bis das eine noch nicht, da gibt s noch eine weitere Referenz auf die Lieferanten Entität mit ca 1000 Datensätzen. Hier ist die Verzögerung beim Öffnen noch bemerkbar.

    Eines ist allerdings eigenartig. Bevor ich die Artikelentität geleert habe, und ich das Subform deaktiviert habe, ist die Maske schnell aufgegangen (auch mehrmals hintereinander). Wenn ich die Subform dann wieder aktiviert habe ging zwar die Maske schnell auf, aber die Kombobox hat ca 10 Sekunden benötigt bis sie mal geladen war (dieselbe Kombobox im Hauptform dauert nur ein paar Millisekunden). Die Maske ging dann etwa 5 Mal hintereinander schnell auf, dann war’s wieder extrem langsam.

    Möglicherweise ist beim Entitätwizard dasselbe Problem schuld, hier dauert der Übergang von Schritt 4 auf 5 bei Referenz Attributen auch extrem lange, wenn es sich um eine Entität mit mehr als 10.000 Datensätzen handelt.

    Gruß
    Hugo

    #4642
    Markus Glitzner
    Teilnehmer

    So, hab die Ursache für das Problem noch weiter eingrenzen können. Scheinbar liegt es doch nicht am Subform, sondern wenn bei einem „List of Value“ Feld eine Regel mit Aktionstyp „Werteliste aktualisieren“ hinterlegt ist und eine weitere Kombobox auf eine Entität mit vielen Datensätzen verweist. Aber auch nur dann, wenn nach dem Speichern des Layouts gewartet wird, bis der Nuclos Process keine CPU Auslastung mehr hat (kling komisch, ist es auch).

    Ich kann das Problem bei wie folgt reproduzieren:

    Am Layout Bestellungen gibt es ein „List of Value“ Feld zu den Aufträgen (zurzeit mit einem Datensatz). Bei diesem Feld ist eine Regel hinterlegt, die eine Kombobox für Lieferanten aktualisiert. In Summe gibt es 1000 Lieferanten, bei den einen Auftrag nur 2. Dann gibt es am selben Layout noch eine Kombobox zu Adressen mit ca 14.000 Datensätzen. Die Kombobox zeigt den Inhalt eines indizierten Feldes der Adress-Entität an.

    Sobald ich nun dieses Formular abspeichere, steigt die CPU Auslastung des Nuclos Process deutlich für mehrere Sekunden an. Wenn in dieser Zeit (also sobald als möglich) dann das Fomular geöffnet wird, geht es schnell, auch mehrmals hintereinander. Wartet man dann ab, bis sich der Nuclos Prozess wieder beruhigt hat und öffnet man danach dasselbe Formular nochmals, dauert es „ewig“.

    Wenn ich nun die Regel wieder lösche und das Layout erneut abspeichere, geht das Formular wieder wie gewohnt schnell auf obwohl das Befüllen der Kombobox mit den 14000 Einträgen der Adressen eine viel zu hohe und zu lange CPU Auslastung verursacht. Dies ist auch genau die Zeit, die das Formular länger zum Öffnen braucht, wenn die Regel hinterlegt ist, also die besagte Verzögerung. Es scheint, dass mit der Regel erst die Kombobox befüllt wird und dann erst das Formular angezeigt wird (erkennbar da die Einträge in der Kombobox dann sofort verfügbar sind). Ohne der Regel verhält es sich genau umgekehrt, erst wird das Formular geöffnet und man kann bereits damit arbeiten, lediglich die Kombobox dauert etwas bis diese gefüllt ist.

    Verwende ich für die Adressen anstelle der Kombobox ein „List of Value“ Feld, tritt das Problem nicht auf. Ist jedoch in diesem Fall nicht erwünscht und behebt auch nicht das eigentliche Problem.

    Gruß
    Hugo

    #4643
    Thomas Pasch
    Teilnehmer

    Hallo Hugo,

    eine JComboBox mit 14000 Einträgen möchte ich mir lieber nicht vorstellen. Ich denke, dass mit so etwas nicht nur Swing Probleme hat. Wäre es da nicht besser, ein Suchfeld zu benutzen?

    Ich habe verstanden, dass durch die Benutzung einer Layoutregel die JComboBox erst gefüllt und dann das Unterformular angezeigt wird. Ohne Regel wird das Unterformular gleich angezeigt. Layoutregeln machen aber oft andere Dinge: vorallem Sachen, die gleich angezeigt werden sollen; daher halte ich das Verhalten hier erst einmal für vernünftig.

    Nicht so gut verstanden habe ich das Verhältnis zwischen Bestellungen, Aufträgen, Lieferanten und Adressen. Sind die Adressen die der Lieferanten?

    Mit besten Gruß

    aanno

    #4644
    Ramin Goettlich
    Teilnehmer

    Hallo Hugo,

    Comboboxen und LOVs dienen beiden demselben Zweck, nämlich der Werteauswahl eines Eintrages aus einer referenzierten Entität. Sie arbeiten aber unterschiedlich:
    -Die Combobox lädt alle Daten der referenzierten Entität und bietet sie an.
    -Die LOV lädt keine Daten, sondern bietet eine Direktsuche bzw. die Suchmaske der referenzierten Entität zur weiteren Eingrenzung an.

    Daraus ergibt sich auch die Verwendung der beiden:
    -Die Combobox ist grundsätzlich für Entitäten zu verwenden, die wenige Daten beinhalten (typische Wertelisten
    -Die LOV ist grundsätzlich für Entitäten mit vielen Daten zu verwenden, da hier für eine Eingrenzung des auszuwählenden Inhaltes meist sowieso eine Suchfunktion sinnvoll ist.

    Eine Combobox mit zigtausend Einträgen wird immer Zeit brauchen, sich mit Inhalt zu befüllen. Denn es müssen nun mal alle Daten ausgelesen, vom Server zum Client übertragen, und auf dem Client dargestellt werden. In diesen Fällen kommt eigentlich nur eine LOV sinnvoll in Frage.

    Möglicherweise ist beim Entitätwizard dasselbe Problem schuld, hier dauert der Übergang von Schritt 4 auf 5 bei Referenz Attributen auch extrem lange, wenn es sich um eine Entität mit mehr als 10.000 Datensätzen handelt.

    Das ist tatsächlich ein uns bereits bekannter Fehler (den wir beheben werden). Auch der Entitätenwizard muss an dieser Stelle eine LOV, und keine Dropdown anzeigen.

    Grüsse,
    nuclosian

    #4645
    Markus Glitzner
    Teilnehmer

    Hallo!

    Ihr habt natürlich Recht, dass in der Regel ein LOV hier die bessere Wahl wäre, jedoch hab ich dasselbe Problem auch bei meiner Referenz auf die Artikel (in den Auftragspositionen) wo nur die Artikel eines Herstellers angezeigt werden sollen. Diese Artikel sollen dann Auswählbar sein und nicht erst wieder über ein LOV gesucht werden müssen, wo der Anwender gar nicht weis ob und welche Artikel es von diesem Hersteller gibt und wie die heißen. Auf eine Kombobox kann hier unmöglich verzichtet werden.

    [quote=“nuclosian“ post=3794]Eine Combobox mit zigtausend Einträgen wird immer Zeit brauchen[/quote] Das ist auch völlig ok und verständlich, doch für mich nicht logisch warum das Befüllen ohne Regel vor dem Anzeigen des Formulars passieren muss und ohne Regel (wie erwünscht) nach dem Öffnen? Abgesehen davon (hab ich im vorigen Post vergessen zu erwähnen) , die Vorschau im Layout Entwurf öffnet sich immer schnell, egal ob mit Regel oder ohne und lädt auch die Komboboxen erst wenn das Formular angezeigt ist, warum also geht das bei der eigentlichen Eingabemaske nicht, sondern nur im Entwurf. Regeln funktionieren ja auch in der Entwurfsvorschau.

    [quote=“aanno“ post=3793]eine JComboBox mit 14000 Einträgen möchte ich mir lieber nicht vorstellen.[/quote] Bei den aktuell 14.568 Einträgen mit einer durchschnittlichen Länge von 14 Zeichen sprechen wir von 231KB, das ist nun wirklich nicht sonderlich viel, oder? Die Einträge müssen nicht mal sortiert werden, da sie durch den Import bereits sortiert übernommen wurden. Ich kenn mich mit Java leider nicht so gut aus, aber vielleicht wird hier die Box einfach nur ineffizient befüllt oder unnötig oft sortiert?

    [quote=“aanno“ post=3793]Nicht so gut verstanden habe ich das Verhältnis zwischen Bestellungen, Aufträgen, Lieferanten und Adressen. Sind die Adressen die der Lieferanten?[/quote] In der Regel werden Bestellungen automatisch generiert, es kann aber auch sein dass Bestellungen manuell erstellt werden. Eine Bestellung wird pro Auftrag und pro Lieferant gemacht. Sind Auftrag und Lieferant ausgewählt, werden Auftragspositionen des jeweiligen Auftrages und des jeweiligen Lieferanten als Bestellposition zur Auswahl gestellt (hier kommt später auch das diskutierte Problem zu tragen). Die Adressen sind nicht die Lieferanten, benötige ich aber zur Auswahl von Lieferadressen.

    Gruß
    Hugo

    #4671
    Thomas Pasch
    Teilnehmer

    Hallo Hugo,

    denke bei einer ComboBox mit 14000 Einträgen vorallem an die Benutzbarkeit. Die scheint mir in diesem Fall nur noch mit Einschränkungen gegeben.

    Wenn es so wäre, dass du nicht alle Lieferanten (Adressen), sondern nur bestimmte Lieferanten (Adressen) in der ComboBox erscheinen sollten, und die Einschränkung lässt sich durch Eingaben aus der Maske herleiten, dann ist es wahrscheinlich möglich die ComboBox mit einer Datenquelle zu verknüpfen, die dass dann erledigt.

    Mit besten Grüßen

    aanno

    #4673
    Markus Glitzner
    Teilnehmer

    Hallo!

    Wenn ich das richtig verstehe, meinst du einen Value List Provider auf eine Dynamische Entität wo der Parameter quasi durchgeschleift wird, sodass beim Öffnen des Formulars die Combobox mit den Adressen leer ist und erst nach Auswahl eines Lieferanten gefüllt wird.

    Könnte funktionieren. Würde auch Sinn machen, da ich in der Suchmaske auch nicht alle 14000 Adressen benötige sondern nur die, des ausgewählten Lieferanten (wenn überhaupt)

    In diesem Zusammenhang stellt sich mir die Frage, ob es nicht generell sinnvoller wäre, wenn eine Combobox mit hinterlegtem VLP und Abhängigkeit auf ein anderes Feld beim Öffnen des Such-Formulars keine Daten anzeigt, sondern erst wenn im Abhängigen Feld etwas eingetragen wurde. Also genau dasselbe Verhalten als wenn ein Datensatz angelegt oder bearbeitet wird.

    Gruß
    Hugo

    #4676
    Markus Glitzner
    Teilnehmer

    Hallo!

    Ich glaub ich hab bei meinem letzten Post ein paar Sachen verwechselt, das mit dem VLP funktioniert doch, weis nicht wie ich auf das gekommen bin?

    Vermutlich, weil ich mich die letzten Tage mit Server Ausfällen beschäftigen musste, hab wohl etwas den Überblick über das Problem verloren … :S

    … oder einfach nur ein Denkfehler?

    Gruß
    Hugo

Ansicht von 13 Beiträgen - 1 bis 13 (von insgesamt 13)