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: Programming > Freie Tabelle Spalte berechnen wenn Filter gesetzt werden

Freie Tabelle Spalte berechnen wenn Filter gesetzt werden

Hallo an alle,

Ich möchte in einer freien Tabelle die Summe der angezeigten Datensätze berechnen.
Unter die Tabelle habe ich ein statisches Textfeld / Programmierung nur Standardsprache gesetzt und mit folgendem Code befüllt:

#set($summe = 'sum(table("9A53C61E3B619509F07EC56FC959921889A2A46A"), row("textvcontrolFCF90ADF"))')
alle Projekte - Gesamt: $CalcUtil.calculate($ProcessingContext, $DC, $summe)


Das funktioniert und rechnet die Summe aller Datensätze die in der Tabelle sichtbar sind.
Wenn ich dann einen Filter setzte bleibt die Summe aber unverändert stehen.

Gibt es eine Möglichkeit dieses Textfeld dazu zu bringen nochmals neu zu rechnen wenn ein Filter gesetzt wurde bzw. die Tabelle sich ändert.
Oder muss ich da grundsätzlich anders rangehen?

Gruß André
26.05.2016 09:05 von SignMaster
Hallo,


kann zwar nur bedingt etwas dazu sagen, aber in der Intrexx-Dokumentation zum
$CalcUtil steht mal folgendes:

Es ist wichtig zu beachten, dass die Werte beim Aufrufen der Seite berechnet werden. Besitzt die Tabelle Navigationselemente und werden diese verwendet, aktualisieren sich NICHT die Werte der Velocity-Anweisungen und -Berechnungen, da die Tabelle dynamisch per AJAX nachgeladen wird. Sollte also gewünscht sein, Tabellenberechnungen auch nach einer Navigation innerhalb der Tabelle durchzuführen, muss das entsprechende VTL-Include (respektive die VM-Datei) ebenfalls per AJAX nachgeladen werden. Als Workaround wird geraten, die zu berechnende Tabelle so aufzubereiten, dass keine Navigation notwendig ist.

Deshalb wird deine Summe nicht aktualisiert. Beim Filtern der Tabelle wird nur der Tabelleinhalt per Ajax neu geladen. Dein statisches Textfeld mit dem VTL-Code wird aber nur dann aktualisiert, wenn die komplette Seite neu geladen wird.
Allerdings sollte es eine Möglichkeit geben:

Dazu auf der Ansichtsseite, die Grundlage der freien Tabelle ist, ein statisches Textfeld mit Programmierung nur Std-Sprache erstellen. Idealerweise das Ansichtsfeld an einer nicht das Layout beeinflussenden Stelle patzieren. Darin wird dann via
$CalcUtil die Summe berechnet und per Javascript in die entsprechende Ansichtskontrolle (auf der Seite außerhalb/unterhalb der Tabelle) geschrieben.

#if( !$foreach.hasNext )
#set( $term= 'sum(table("9A53C61E3B619509F07EC56FC959921889A2A46A"), row("textvcontrolFCF90ADF"))' )
#set( $summe = $CalcUtil.calculate($ProcessingContext, $DC, $term) )
<script type="text/javascript">
Browser.setValue("15C9...AD81", 'alle Projekte - Gesamt: $!Renderer.renderCurrency($summe)'); ## Ansichtsfeld außerhalb der Tabelle aktualisieren
</script>
#end


So könnte es dann funktionieren. Wie gesagt, kann es nicht testen... attention


[EDIT]
Ach, da fällt mir gerade noch ein, dass es evt. auch mit dem Expert-Attribut
onload
funktionieren könnte.
Dieses Expert-Attribut in der freien Tabelle anlegen mit dem Wert
#set( $summe = $CalcUtil.calculate($ProcessingContext, $DC, 'sum(table("9A53C61E3B619509F07EC56FC959921889A2A46A"), row("textvcontrolFCF90ADF"))') )Browser.setValue("15C9...AD81", 'alle Projekte - Gesamt: $!Renderer.renderCurrency($summe)');

Sorry, geht ja nicht, da die JS-Funktion des onload-Attributes fest in den Response-Handler eingebaut wird und daher der VTL-Code nicht erneut beim Laden der Tabelleninhalte ausgeführt wird. pinch
Das Problem hatte ich schon mal, nur dass einem das hinterher erst einfällt.


Gruß,
handw3rker
28.05.2016 00:12 von handw3rker
Hallo handw3rker,

Das Forum war einige Zeit offline.
Bin erst jetzt dazu gekommen das auszuprobieren.

Danke für Deine Hilfe. Es klappt nur leider noch nicht.

Habe die Anleitung befolgt und
1. auf der Ansichtsseite für die freie Tabelle den Code in ein Textfeld (Std-Sprache) eingefügt.
2. auf der Ansichtseite wo die freie Tabelle angezeigt wird ein Ansichtsfeld eingefügt und und die GUID rauskopiert und in den Code von Schritt 1 eingefügt .
Da das nicht funktioniert hat - habe ich das auch noch mit dem FeldNamen "textvcontrol7B136538" probiert. klappt aber auch nicht.

hier der bisherige Code:
#if( !$foreach.hasNext )
#set( $term= 'sum(table("9A53C61E3B619509F07EC56FC959921889A2A46A"), row("textvcontrolFCF90ADF"))' )
#set( $summe = $CalcUtil.calculate($ProcessingContext, $DC, $term) )
<script type="text/javascript">
Browser.setValue("textvcontrol7B136538", 'alle Projekte - Gesamt: $!Renderer.renderCurrency($summe)'); ## Ansichtsfeld außerhalb der Tabelle aktualisieren
</script>
#end



Es kommt immer folgende Fehlermeldung.

Gruß André
13.06.2016 13:07 von SignMaster
Hallo André,

hmmm... seltsam, attention
Der Funktion
Browser.setValue(<oHtml>,<String>) kann als erster Parameter auch eine gültige Guid (40 Zeichen) anstatt des Objektes übergeben werden. Die Funktion ermittelt dann automatisch via
getElement(<Guid>) das entsprechende HTML-Objekt.
Die Variante mit dem Namen der Kontrolle ("textvcontrol7B136538") funktioniert daher schon mal grundsätzlich nicht.

Kommt denn bei Angabe der Guid die gleiche Fehlermeldung bzgl. "oHtml.tagName is undefined"?
Würde heißen, dass die Kontrolle per Guid nicht gefunden wird.

Gegebenenfalls mal in der Javascript-Konsole manuell mit
getElement("GuidDerAnsichtskontrolle") schauen, ob die Ansichtskontrolle gefunden wird, oder mal mit
Browser.setValue("GuidDerAnsichtskontrolle", "TEST") einfach testen.

Ich hab bei uns eine ähnliche Vorgehensweise umgesetzt und das lief ohne Probleme.
Vielleicht auch nochmal auf korrekt eingefügte Guid prüfen...

Gruß
15.06.2016 21:10 von handw3rker
Hallo handw3rker,

Danke für Deine Anleitung.
Ich habe probiert und gemacht - aber das nicht zum laufen gebracht. attention

Meine jetzige Lösung ist eine zusätzliche Tabelle auf der Ansichtsseite, bei der alle Datenfelder ausgeblendet sind und nur das Berechnungsfeld angezeigt wird.
Das ganze dann in der Höhe schmal gezogen und über der HauptTabelle plaziert - auf die gleiche Abhängigkeit wie die HauptTabelle (die mit allen Datenfeldern) gesetzt - und voila - es funktioniert.
Die Berechnung wird dann beim Filtern ausgelöst.

Was mich in dem Zusammenhang auch interessieren würde: Kann ein Standard Berechnungs-Element auch mit einem Filter versehen werden?

Gruß André
27.07.2016 08:31 von SignMaster
Zurück | Alles über Intrexx | Impressum | Datenschutzerklärung

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