Autor Thema: Feld leeren, wenn der Wert sich ändert  (Gelesen 2299 mal)

kuschli

  • Gast
Feld leeren, wenn der Wert sich ändert
« am: 30.11.04 - 16:12:22 »
Hallo!

Ich habe in einer Maske ein Optionsfeld mit zwei Auswahlmöglichkeiten.
Der User muss eine Auswahl treffen und danach eine kleine Schaltfläche betätigen, mit der dann ein Dialogfenster aufgerufen wird. In diesem Fenster werden Eingaben getätigt, die dann in die Maske übertragen werden.

Entscheidet sich der User dazu, doch die andere Optionsauswahl zu treffen, sollen die bisher gefüllten (berechneten) Felder geleert werden.

Dazu habe ich ein Hilfsfeld angelegt, daß den "alten Wert" des Optionsfeldes wiedergeben soll. Dieses Feld ist "berechnet", "nach Validierung berechnen" und hat den Wert des Optionsfeldes.

Im Exiting des Optionsfeldes habe ich folgenden Script:

Sub Exiting(Source As Field)
   Dim ws As New NotesUiWorkspace
   Dim S As New NotesSession
   Dim uidoc As NotesUiDocument
   Dim strNeuerWert As String
   Dim strAlterWert
   
   Set uidoc = ws.CurrentDocument
   strAlterWert = uidoc.FieldGetText("optListenartA")
   strNeuerWert = uidoc.FieldGetText("optListenart")
   
   If strAlterWert = "Auswahl1" And strNeuerWert = "Auswahl2" Then
      Call uidoc.FieldSetText("txtListennzweck","")
      Call uidoc.FieldSetText("txtAuswahl","")
      Call uidoc.FieldSetText("txtAusgabe","")
      Call uidoc.FieldSetText("txtSortierung1","")
      Call uidoc.FieldSetText("txtSortierung2","")
      Call uidoc.FieldSetText("txtSortierung3","")
      Call uidoc.FieldSetText("txtSummierung","")
      Call uidoc.FieldSetText("txtVorschub","")
      
   Elseif strAlterWert = "Auswahl2" And strNeuerWert = "Auswahl1" Then
      Call uidoc.FieldSetText("txtListennummer","")
      Call uidoc.FieldSetText("txtKategorie","")
      Call uidoc.FieldSetText("txtListenname","")
      Call uidoc.FieldSetText("txtAuftragsnummer2","")
      Call uidoc.FieldSetText("txtAusgabefelder","")
      Call uidoc.FieldSetText("txtAuswahl","")
      Call uidoc.FieldSetText("txtAuswahlbeding","")
      Call uidoc.FieldSetText("txtAusgabe","")
      Call uidoc.FieldSetText("txtSortierung","")
      Call uidoc.FieldSetText("txtSummierung","")
      Call uidoc.FieldSetText("txtVorschub","")
      Call uidoc.FieldSetText("txtVorschubabw","")      
      Call uidoc.FieldSetText("txtBearbeitungsprog","")
      Call uidoc.FieldSetText("txtAufwandsgrad","")
      
   End If
End Sub

Aber da geschieht leider gar nichts. Was ist da falsch? Ich bin im Script leider noch nicht so erfahren und würde mich sehr über Hilfe freuen.

Falls noch Fragen offen sind, beantworte ich sie gern.

Ich arbeite mit der Version 5.0.10.

Gruß,
kuschli

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Feld leeren, wenn der Wert sich ändert
« Antwort #1 am: 30.11.04 - 16:23:53 »
AFAIK muss das Feld editierbar sein und darf kein berechnetes Feld sein, wenn Du die Frontend-Methode NotesUIDocument.FieldSetText einsetzt.

Abhilfe:
Mach das im Backend (NotesDocument Klasse).

Bsp. (die ersten Zeilen Deines Codes):

   Dim ws As New NotesUiWorkspace
   Dim S As New NotesSession
   Dim uidoc As NotesUiDocument
Dim doc as NotesDocument
   Dim strNeuerWert As String
   Dim strAlterWert
   
   Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
   strAlterWert = doc.optListenartA(0)
   strNeuerWert = doc.optListenart(0)
   
   If strAlterWert = "Auswahl1" And strNeuerWert = "Auswahl2" Then
      doc.txtListennzweck = ""
      doc.txtAuswahl = ""

............
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feld leeren, wenn der Wert sich ändert
« Antwort #2 am: 30.11.04 - 16:29:58 »
Ne, ne, Matthias - dazu muss das kein bearbeitbares Feld sein. Das geht auch mit berechneten.

- Was mir noch nicht ganz klar ist: Wann setzt Du Dein optListenArtA ?
- Unnötig ist Deine doppelte Verschachtelung. Es würde vollkommen genügen:
If strAlterWert <> strNeuerWert

Das mit dem Exiting event halte ich für u.U. gefährlich. Besser wäre es m.E., in dem Optionsfeld einzustellen, dass eine Neuberechnung bei Schlüsselwortänderung stattzufindne hat, und den Code dann ins Event PostRecalc zu setzen.

Ich kann aber noch keine klare Ursache erkennen, warum nicht auch das gegenwärtige Verfahren klappen sollte. Irgendeine unbekannte Randbedingung, irgendwas, was ich jetzt übersehen habe ...

Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Feld leeren, wenn der Wert sich ändert
« Antwort #3 am: 30.11.04 - 16:33:04 »
Ne, ne, Matthias - dazu muss das kein bearbeitbares Feld sein. Das geht auch mit berechneten.

Dann stimmt aber die Designerhilfe nicht:

Zitat
Call notesUIDocument.FieldSetText( fieldName$, textValue$ )
Parameters
fieldName$
String. The name of the field whose value you want to set. The field must be editable.

Siehe letzten Satz, steht so sowohl in der R5 als auch ND6 Help.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feld leeren, wenn der Wert sich ändert
« Antwort #4 am: 30.11.04 - 16:38:54 »
Ich habe keine Ahnung, warum die das sooo schreiben. Meinen die vielleicht: Es müsste "theoretisch" bearbeitbar sein (weil EditMode) ?

Mach Dir einfach ein berechnetes Feld namens Feld und einen Buhtong mit folgendem Code:
Code
Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument
	
	Set uidoc = ws.CurrentDocument
	Call uidoc.FieldSetText ("Feld", Inputbox$ ("Welcher Wert soll eingetragen werden ?"))

Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Feld leeren, wenn der Wert sich ändert
« Antwort #5 am: 30.11.04 - 16:47:45 »
OK, so klappt das Bernhard. Ich gehe aber mal davon aus, dass es da Probleme geben kann, weil eben in der ersten Version der 5er Help so enthalten und auch in der neuesten 6er Help.

Leider gehen die hier aber nicht genauer darauf ein.


AFAIK gibt es spätestens dann Probleme, wenn das Feld verborgen ist (Hide-when).

Ich nehme für solche Dinge immer die Backend-Methoden der NotesDocument-Klasse, da weiß ich wie ich dran bin.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


kuschli

  • Gast
Re: Feld leeren, wenn der Wert sich ändert
« Antwort #6 am: 30.11.04 - 16:49:23 »
Vielen vielen Dank für Eure Antworten.

Ich werde das gleich morgen mal ausprobieren.

Schönen Feierabend,
kuschli

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feld leeren, wenn der Wert sich ändert
« Antwort #7 am: 30.11.04 - 16:51:56 »
Matthias, ob das Feld hidden ist oder nicht ist Jacke wie Hose.
Allerdings gilt auch für mich: Ich wüsste nicht, wann ich das letzte Mal mit FieldSetText gearbeitet habe. Ich fühle mich im Frontend bei solchen Sachen viel zu eingeschränkt und mache das auch immer im Backend.

Bernhard

Glombi

  • Gast
Re: Feld leeren, wenn der Wert sich ändert
« Antwort #8 am: 30.11.04 - 17:34:00 »
Es wäre mal interessant zu wissen, ob das Exiting Event überhaupt angetriggert wird und - falls ja - ob eine der If Anweisungen durchlaufen wird.
Testweise würde ich mal einige msgbox einbauen oder den Debugger einschalten.

Das Exiting Event ist mit Vorsicht zu genießen, da es nicht ausgeführt wird, wenn der User bspw. eine Aktion anklickt.

Ob man
 uidoc.FeldSetText( "Feld", "" ) oder
 doc.Feld = ""
nimmt, hängt u.a. auch davon ab, ob das AutoReload eingeschaltet ist. Ich hatte schon eine Anwendung vor mir, in der das explizit deaktiviert war. Da konnte man soviel wie man wollte ins Backend schreiben, es wurde immer wieder mit den UI Werten überschrieben. Also Vorsicht!

Andreas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz