Teilformulare beim Initialisieren nur ausblenden...

Ob nun dynamisch agierende Subformulare, oder einfach nur Textfelder...
Antworten
Benutzeravatar
URH
Beiträge: 36
Registriert: 14.08.2017, 11:37

Teilformulare beim Initialisieren nur ausblenden...

Beitrag von URH » 18.12.2017, 11:54

Hallo,
um den User beim ersten Öffnen des Formulars nicht zu erschlagen oder um eine "Fehlbedienung" zu verhindern (nach dem Motto was man nicht sieht kann man auch nicht falsch benutzen ;)) blende ich diverse TF erstmal so aus:

Code: Alles auswählen

Formular.TB.Bericht::initialize - (JavaScript, client)

InfTag.presence = "hidden";
InfMed.presence = "hidden";
InfMed.MedBeTxt.presence = "hidden";
InfZim.presence = "hidden";
InfZim.ZimZuTxt.presence = "hidden";
InfFin.presence = "hidden";
Bearbeiten.presence = "hidden";
Je Auswahl in einem DDL werden die Inf*.* eingeblendet und können bearbeitet werden, das TF "Bearbeiten" (beinhaltet CBs "Sperren", Drucken", Relevant") wird erst nach Abschluss eines Berichts oder beim Erzeugen einer neuen Instanz per Button bei der jeweils abgeschlossenen Instanz eingeblendet.

Leider hab ich mir damit nun aber einen Bock geschossen, wie ich beim Testen mit Dummydaten nach dem Speichern feststellen mußte.
Nicht nur, daß dann auch bei bereits erstellten neuen Instanzen die Felder beim erneuten Öffnen ausgeblendet bleiben, auch wird dann das Layout an manchen Stellen verschoben.
Wie erreiche ich, daß beim erneuten Öffnen die "genutzten" TF innerhalb von bereits erstellten Berichte, eingeblendet werden?
In der Theorie: Gehe beim Öffnen des Formulars durch alle enthalten Berichtsinstanzen und blende die TF ein die Content erhalten.
Das TF "Bearbeiten" soll bei jeder bereits vorhandenen Instanz eingeblendet sein.
Erste Anlaufpunkt könnte die DDL "Mitarbeiter sein, da dies ein Pflichtfeld ist und ohne eine Auswahl dort erst gar keine neue Instanz erzeugt werden kann, ein weiteres Pflichtfeld das eigentlich fast immer vorkommt ist "Kurzbericht"
Geht das in die richtige Richtung und wenn ja wie durchlaufe ich beim Öffnen alle vorhandenen Instanzen um zu Prüfen ob das TF ausgeblendet sein soll oder nicht?

vg, Uwe

Benutzeravatar
radzmar
Beiträge: 961
Registriert: 26.10.2011, 10:18

Teilformulare beim Initialisieren nur ausblenden...

Beitrag von radzmar » 20.12.2017, 20:35

Der Schritt mit dem Ausblenden beim Initialiseren ist doch eigentlich überflüssig. Es genügt doch dafür, die Präsens der betreffenden Teilformulare im Designer wie erforderlich einzustellen. Dann zeigt das Formular bei ersten Öffnen auch nur die eingestellte Teilformulare an.

Damit die dann die Änderungen der Präsens behalten, müssen die Teilformulare und deren eingeschlossenen Felder eine Datenbindung haben und das Formular muss so eingestellt sein, dass es Skripänderungen am Formular automatisch beibehält. Die Einstellung findest Du unter [Datei] > [Formulareigenschaften] > [Laufzeit].

Benutzeravatar
URH
Beiträge: 36
Registriert: 14.08.2017, 11:37

Teilformulare beim Initialisieren nur ausblenden...

Beitrag von URH » 20.12.2017, 20:54

Hallo Radzmar,
lieben Dank für diese Info. Ich werd es mir mal anschauen, wie auch das Thema Datenanbindung. Hierzu hatten ich ja nochmal eine Frage zum Thema XML formuliert, da ich mittelfristig sehr gerne Layout und Daten von einander trennen würde.
Das eigentliche Thema um das es hier geht habe ich zwischenzeitlich so gelöst:

Code: Alles auswählen

Formular.TB.Bericht::initialize - (JavaScript, client)

InfTag.presence = "hidden";
InfMed.presence = "hidden";
InfMed.MedBeTxt.presence = "hidden";
InfZim.presence = "hidden";
InfZim.ZimZuTxt.presence = "hidden";
InfFin.presence = "hidden";
Bearbeiten.presence = "hidden";

for (var i = 0; i < Bericht.instanceManager.count; i++) 
{ 
			
	if (xfa.resolveNode("Bericht[" + i + "].Bereich").rawValue == "allg. Tagesinfo")
	{
		xfa.resolveNode("Bericht[" + i + "].InfTag").presence = "visible";
		xfa.resolveNode("Bericht[" + i + "].Bearbeiten").presence = "visible";
	}
	
	if (xfa.resolveNode("Bericht[" + i + "].Bereich").rawValue == "Medi-Ausgabe")
	{
		xfa.resolveNode("Bericht[" + i + "].InfMed").presence = "visible";
		xfa.resolveNode("Bericht[" + i + "].Bearbeiten").presence = "visible";
	}
	
	if (xfa.resolveNode("Bericht[" + i + "].InfMed.MedBeTxt").rawValue)
	{
		xfa.resolveNode("Bericht[" + i + "].InfMed").presence = "visible";
		xfa.resolveNode("Bericht[" + i + "].InfMed.MedBeTxt").presence = "visible";
		xfa.resolveNode("Bericht[" + i + "].Bearbeiten").presence = "visible";
	}
	
	if (xfa.resolveNode("Bericht[" + i + "].Bereich").rawValue == "Zimmerkontrolle")
	{
		xfa.resolveNode("Bericht[" + i + "].InfZim").presence = "visible";
		xfa.resolveNode("Bericht[" + i + "].Bearbeiten").presence = "visible";
	}
	
	if (xfa.resolveNode("Bericht[" + i + "].InfZim.ZimZuTxt").rawValue)
	{
		xfa.resolveNode("Bericht[" + i + "].InfZim").presence = "visible";
		xfa.resolveNode("Bericht[" + i + "].InfZim.ZimZuTxt").presence = "visible";
		xfa.resolveNode("Bericht[" + i + "].Bearbeiten").presence = "visible";
	}
	
	if (xfa.resolveNode("Bericht[" + i + "].Bereich").rawValue == "Auszahlungen")
	{
		xfa.resolveNode("Bericht[" + i + "].InfFin").presence = "visible";
		xfa.resolveNode("Bericht[" + i + "].Bearbeiten").presence = "visible";
	}
	
	if (xfa.resolveNode("Bericht[" + i + "].Kurzbericht").rawValue)
	{
		xfa.resolveNode("Bericht[" + i + "].Bearbeiten").presence = "visible";
	}
}
Mit Sicherheit das ganz bestimmt nicht die eleganteste Lösung und der Profi schlägt vermutlich die Hände über'm Kopf zusammen, aber es funktioniert, bringt genau das gewünschte Ergebnis und es ist mal was, was auf meinem Mist gewachsen ist ;)

VG, Uwe

Antworten