Sich wiederholende Formatierung von Textfeldern

Fragen und Antworten rund um das Thema JavaScript im LiveCycleDesigner
Benutzeravatar
twierschin
Beiträge: 19
Registriert: 04.01.2018, 04:12
Wohnort: Norderstedt

Sich wiederholende Formatierung von Textfeldern

Beitrag von twierschin » 12.04.2018, 08:14

Moin moin,

ich stehe ein wenig auf dem Schlauch und hoffe, mir kann jemand auf die Sprünge helfen.

In der Hierarchie habe ich 4 Textfelder (A - D).

Das Format für Textfeld A ist neben den Standardeinstellungen auch per Script gesteuert. Es funktioniert genau so, wie ich es haben möchte.

Code: Alles auswählen

 Formular1.#subform[0].A::enter - (JavaScript, client)
// Setzt die Standardeinstellungen, wenn Feld gefüllt wird / ist (Enter-Event)
this.font.posture = "normal";
this.font.weight = "normal";
this.font.fill.color.value = "0,0,0";
}
// Setzt die Standardeinstellungen, wenn Feld gefüllt wird / ist (Enter-Event)
this.font.posture = "normal";
this.font.weight = "normal";
this.font.fill.color.value = "0,0,0";
}

 Formular1.#subform[0].A::exit - (JavaScript, client)
// Wenn Feld ist NULL, dann sollen beim Verlassen folgende Einstellungen gelten (Exit-Event)
if (this.rawValue === null)
{
	this.font.posture = "italic";
	this.font.weight = "normal";
	this.font.fill.color.value = "128,128,128";
}
else
{
	this.font.posture = "normal";
	this.font.weight = "normal";
	this.font.fill.color.value = "0,0,0";
}
Nun möchte ich die gleiche Script-Steuerung auch auf weitere Textfelder (B - D) anwenden. Da ich den Code nicht unbedingt wiederholen möchte, habe ich mir die Variable "font" angelegt. In dieser Variablen finden sich die Codes als Funktionen (textfeld_std & textfeld_leer) wieder.

Code: Alles auswählen

 Formular1.#variables[0].font - (JavaScript, client)

function textfeld_std(){
// Setzt die Standardeinstellungen, wenn Feld gefüllt wird / ist (Enter-Event)
this.font.posture = "normal";
this.font.weight = "normal";
this.font.fill.color.value = "0,0,0";
}

function textfeld_leer(){
// Wenn Feld ist NULL, dann sollen beim Verlassen folgende Einstellungen gelten (Exit-Event)
if (this.rawValue === null)
{
	this.font.posture = "italic";
	this.font.weight = "normal";
	this.font.fill.color.value = "128,128,128";
}
else
{
	this.font.posture = "normal";
	this.font.weight = "normal";
	this.font.fill.color.value = "0,0,0";
}
Bin mir nicht sicher, ob ich die Variable, mit den Funktionen korrekt angelegt habe. Auch weiß ich nicht, mangels Java-Kenntnisse, wie ich die Funktionen für die gewünschten Textfelder zur Anwendung bringe.

Vielen Dank für Unterstützung.

vg
Thomas
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
nele_sonntag
Beiträge: 2742
Registriert: 04.05.2009, 15:12
Wohnort: Frankfurt
Kontaktdaten:

Re: Sich wiederholende Formatierung von Textfeldern

Beitrag von nele_sonntag » 12.04.2018, 08:54

Hallo Thomas,

wir scripten hier in JavaScript :D java ist etwas anderes.
Etwas Grundlegendes zu Funktionen.

Generell ist deine Herangehensweise gut. Alles, was mehrfach gleich im Formular gescriptet wird, sollte man als Funktion auslagern.
Denn wenn sich bspw. in deinem Fall einfach die Formatierung ändert, musst du sie nicht an 546 Stellen im Formular ändern sondern nur zentral in der Funktion und das nur einmal.

ABER die Funktion gehört etwas anders geschrieben, Du arbeitest nicht mit this, sondern übergibst der Funktion das betreffenden Objekt, in deinem Fall jeweils ein anderes Textfeld:

Code: Alles auswählen

function textfeld_std(xfaObj)
{
	// Setzt die Standardeinstellungen, wenn Feld gefüllt wird / ist (Enter-Event)
	xfaObj.font.posture = "normal";
	xfaObj.font.weight = "normal";
	xfaObj.font.fill.color.value = "0,0,0";
	
	return;
}
Das muss natürlich nicht xfaObj heißen, Du kannst es auch uebegebenesObjekt nennen, aber mit dem Namen in der Klammer, scriptest du dann innerhalb der Funktion.

Code: Alles auswählen

function textfeld_leer(xfaObj)
{
	// Wenn Feld ist NULL, dann sollen beim Verlassen folgende Einstellungen gelten (Exit-Event)
	if (xfaObj.rawValue == null || xfaObj.rawValue == "" || xfaObj.rawValue == 0)
	{	
		xfaObj.font.posture = "italic";
		xfaObj.font.weight = "normal";
		xfaObj.font.fill.color.value = "128,128,128";
	}else
	{
		xfaObj.font.posture = "normal";
		xfaObj.font.weight = "normal";
		xfaObj.font.fill.color.value = "0,0,0";
	}
	return;
}
Wenn Du prüfen möchtest, ob das Feld leer ist, solltest du alle Varianten abprüfen, denn null ist es in den seltensten Fallen. Als Anfänger würde ich ebenso vermeiden mit === abzuprüfen, denn dann prüft JavaScript explizit nur darauf ab. Ansonsten ist JavaScript eine sehr benutzerfreundliche Sprache und prüft auf null ab, aber auch auf null als String ab. Das verhinderst du aber mit den === Vergleichsoperatoren. Insofern am Anfang besser nur ==


Dort wo du die Funktion aufrufst, bspw. im ENTER Event des Textfeldes A, folgt dann der Funktionsaufruf:

Code: Alles auswählen

font.textfeld_std(this);
Hier übergibst du der Funktion mit this das komplette Objekt.

Das musst du nun nur noch für deine anderen Funktionen so machen und den Funktionsaufruf jeweils dort einbinden, wo du möchtest, dass er stattfindet.

LG Mandy

PS: Ich hab irgendwo noch einen Huddelfehler drin..

Benutzeravatar
nele_sonntag
Beiträge: 2742
Registriert: 04.05.2009, 15:12
Wohnort: Frankfurt
Kontaktdaten:

Re: Sich wiederholende Formatierung von Textfeldern

Beitrag von nele_sonntag » 12.04.2018, 09:16

Soooo, weiteren Fehler gefunden.

Dein Scriptobjekt darf nicht "font" heißen. Das ist ein bereits systemseitig verwendeter Begriff. Insofern gibt er dann immer aus, dass font keine Eigenschaft "textfeld_std" besitzt. Also bitte umbenennen. Meist nimmt man "scripte".

Bei der zweiten Funktion fehlt dir die schließenden geschweifte Klammer der Funktion.

Aber irgendwo hakt es noch, ich sehe es nur gerade nicht. :(

LG Mandy

Benutzeravatar
nele_sonntag
Beiträge: 2742
Registriert: 04.05.2009, 15:12
Wohnort: Frankfurt
Kontaktdaten:

Re: Sich wiederholende Formatierung von Textfeldern

Beitrag von nele_sonntag » 12.04.2018, 09:29

:D :D :D :D
Ok, es ist noch früh am morgen. Es funktioniert alles, aber wenn man natürlich die ENTER Funktion auch ins EXIT EVENT kopiert, brauch man sich nicht zu wundern, dass es nicht funktioniert, wie es soll. :D :D

armine
Beiträge: 2690
Registriert: 16.05.2009, 10:24

Re: Sich wiederholende Formatierung von Textfeldern

Beitrag von armine » 12.04.2018, 09:29

Darf ich ein Beispiel beisteuern?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
twierschin
Beiträge: 19
Registriert: 04.01.2018, 04:12
Wohnort: Norderstedt

Re: Sich wiederholende Formatierung von Textfeldern

Beitrag von twierschin » 12.04.2018, 09:32

Hallo Mandy,
Ok ... Jaca Script

ich glaubte verstanden zu haben, jedoch hapert es bei mir noch an der Umsetzumg

Benutzeravatar
nele_sonntag
Beiträge: 2742
Registriert: 04.05.2009, 15:12
Wohnort: Frankfurt
Kontaktdaten:

Re: Sich wiederholende Formatierung von Textfeldern

Beitrag von nele_sonntag » 12.04.2018, 09:38

Naja, ich habe dir ja die korrekten Funktionen oben hinkopiert. Du must sie ja nur in dein PDF hineinkopieren.
Und den Funktionsaufruf kopierst du jeweils ins ENTER oder EXIT Event deiner Felder.. du siehst das ja auch sehr schön an armines Beispiel.
Der viele Text ist ja nur, damit du verstehst, was bei dir falsch war, damit du es beim nächsten Mal verstehst.

Das sollte zu schaffen sein. :)

armine
Beiträge: 2690
Registriert: 16.05.2009, 10:24

Re: Sich wiederholende Formatierung von Textfeldern

Beitrag von armine » 12.04.2018, 09:57

Es ist mir peinlich, aber in der Eile habe ich eine Zeile Code nicht bedacht.

function Format_caption(Objekt) {
Objekt.caption.font.fill.color.value = "0,0,0" ;
Objekt.caption.font.posture = "normal" ;
Format_exit(Objekt) ;
}

Bitte nachtragen.

Benutzeravatar
twierschin
Beiträge: 19
Registriert: 04.01.2018, 04:12
Wohnort: Norderstedt

Re: Sich wiederholende Formatierung von Textfeldern

Beitrag von twierschin » 25.04.2018, 14:52

Dankeschön für die Hilfe!

Soweit habe ich alles hinbekommen. Nun noch ein Frage zu dem Thema. Habe mir schon 'nen Wolf gesucht.

Die grau hinterlegte Schrift soll nur eine Ausfüllhilfe sein. Wie kriege ich es hin, dass nur die händisch ausgefüllten Felder gedruckt werden. Stand jetzt ist ... What you see is what you get! Die vom Anwender nicht ausgefüllten Felder werden ebenso gedruckt. Sollen sie aber nicht.

armine
Beiträge: 2690
Registriert: 16.05.2009, 10:24

Re: Sich wiederholende Formatierung von Textfeldern

Beitrag von armine » 25.04.2018, 15:14

Das kannst du regeln. Du musst aber entscheiden, ob das leere Feld nur unsichtbar wird oder ganz verschwindet.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten