Autor Thema: Eingabeumsetzung nur einmalig ausfuehren?  (Gelesen 2224 mal)

Offline mh70220

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
    • Meine HP
Eingabeumsetzung nur einmalig ausfuehren?
« am: 21.01.05 - 16:45:45 »
Hi all,

Ich habe mir folgende Formel gebastelt:

_mac1 := @LeftBack(MACAdresse;10);
_mac2 := @LeftBack(MACAdresse;8);
_mac22 := @RightBack(_mac2;2);
_mac3 := @LeftBack(MACAdresse;6);
_mac33 := @RightBack(_mac3;4);
_mac4 := @LeftBack(MACAdresse;4);
_mac44 := @RightBack(_mac4;6);
_mac5 := @LeftBack(MACAdresse;2);
_mac55 := @RightBack(_mac5;8);
_mac6 := @RightBack(MACAdresse;10);
_mac1 + "-" + _mac22 + "-" + _mac33 + "-" + _mac44 + "-" + _mac55 + "-" + _mac6

Diese habe ich in einem Feld fuer die Eingabe der MAC Adresse in die Eingabeumsetzung geschrieben. Bei Aktualisierung des Dokumentes fuehrt er dieses auch durch. Das Problem ist nur er macht dies bei jeder Akualisierung und packt mir immer wieder eine neue MAC Adresse hinten dran, so das ich diese dann 10 mal in dem Feld stehen habe.

Hat jemand eine Idee, wie ich diese Eingabeumsetzung nur ein mal ausfuehren lassen kann?

Danke
Matthias
Notes 5.05
Server 5.05
Windows 2000

Glombi

  • Gast
Re: Eingabeumsetzung nur einmalig ausfuehren?
« Antwort #1 am: 21.01.05 - 16:52:56 »
Du musst abfragen, ob das Feld bereits gesetzt ist.
Wenn das Feld bspw. MACAdresse heisst dann so:

@If(MACAdresse != "";@Return(MACAdresse);"");
mac1 := @LeftBack(MACAdresse;10);
_mac2 := @LeftBack(MACAdresse;;
_mac22 := @RightBack(_mac2;2);
_mac3 := @LeftBack(MACAdresse;6);
_mac33 := @RightBack(_mac3;4);
_mac4 := @LeftBack(MACAdresse;4);
_mac44 := @RightBack(_mac4;6);
_mac5 := @LeftBack(MACAdresse;2);
_mac55 := @RightBack(_mac5;;
_mac6 := @RightBack(MACAdresse;10);
_mac1 + "-" + _mac22 + "-" + _mac33 + "-" + _mac44 + "-" + _mac55 + "-" + _mac6


Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Eingabeumsetzung nur einmalig ausfuehren?
« Antwort #2 am: 21.01.05 - 17:05:27 »
Das kann nicht funktionieren, Andreas. Nur wenn das Feld MACAdresse leer ist, würden die nachfolgenden Formeln ausgeführt - und ins Leere laufen (das Feld ist ja leer).

Matthias: Deine Formeln erscheinen mir merkwürdig. Sag' mal bitte an: Was erwartest Du als Input in dem Feld, und wie soll das dann normiert aussehen ? Wenn das dann sauber programmiert ist, erledigt sich das mit dem "einmaligen" Ausführen bzw. dem immer richtigen Ausführen von selbst.

Bernhard

Offline mh70220

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
    • Meine HP
Re: Eingabeumsetzung nur einmalig ausfuehren?
« Antwort #3 am: 21.01.05 - 18:04:00 »
hi,

habe die Loesung des Problems gefunden:

Ich bin von dem Eintrag "Eingabeumsetzung" zu "Exiting gegangen und habe da folgendes LotusScript eingetragen:

Sub Exiting(Source As Field)
   Dim session As New NotesSession
   Dim uiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   
   Set db = session.CurrentDatabase
   Set uidoc = uiws.CurrentDocument
   Set doc = uidoc.Document
   
   Dim mac As String
   Dim mac1 As String
   Dim mac2 As String
   Dim mac22 As String
   Dim mac3 As String
   Dim mac33 As String
   Dim mac4 As String
   Dim mac44 As String
   Dim mac5 As String
   Dim mac55 As String
   Dim mac6 As String
   Dim mac66 As String
   Dim mac7 As String
   Dim mac77 As String
   Dim result As String
   
   mac = uidoc.fieldgettext ("MACAdresse")
   
   mac1 = Left$(mac,2)
   mac2 = Left$(mac,4)
   mac22 = Right$(mac2,2)
   mac3 = Left$(mac,6)
   mac33 = Right$(mac3,2)
   mac4 = Left$(mac,8)
   mac44 = Right$(mac4,2)
   mac5 = Left$(mac,10)
   mac55 = Right$(mac5,2)
   mac6 = Right$(mac,2)
   
   mac7 = Left$(mac,3)
   mac77 = Right$(mac7,1)
   
   result = mac1 + ":" + mac22 + ":" + mac33+ ":" + mac44 + ":" + mac55 + ":" + mac6
   
   If mac77 = "-" Then
      End
   Else
      Call uidoc.fieldsettext("MACAdresse",result)
   End If
   
End Sub

Funktioniert wunderbar.

In Eingabeumsetzung habe ich jetzt nur nocht @uppercase(MACAdresse) stehen um die kleine Buchstaben "Gross" zu machen. LOL

Manchmal muss man nur anderes Denken.  ;D

Matthias
Notes 5.05
Server 5.05
Windows 2000

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Eingabeumsetzung nur einmalig ausfuehren?
« Antwort #4 am: 21.01.05 - 18:09:44 »
Irgendwie werde ich aber das Gefühl nicht los, dass Du Dir einerseits die Sache zu kompliziert, andererseits wiederum zu einfach machst.
Und: Das Exiting-Event muss nicht ausgeführt werden. Es ist keine adäquate Ersetzung der Input validation.

Bernhard

Offline mh70220

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
    • Meine HP
Re: Eingabeumsetzung nur einmalig ausfuehren?
« Antwort #5 am: 21.01.05 - 18:38:28 »
Mit dem Ausfuehren des Exiting Events hast du recht. Kann ich dem ganzen Abhilfe schaffen, indem ich diese Formel in das "QuerySave" Event packe?

Matthias
Notes 5.05
Server 5.05
Windows 2000

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Eingabeumsetzung nur einmalig ausfuehren?
« Antwort #6 am: 21.01.05 - 19:09:53 »
Hi,

yoo, kannst du. Ich mache meine Validierungen schon Jahr und Tag im QuerySave-Event der Maske.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Eingabeumsetzung nur einmalig ausfuehren?
« Antwort #7 am: 21.01.05 - 20:55:35 »
Den von Matthias geposteten Code sollte man nicht übernehmen, um MAC-Adressen zu normieren. Das Verfahren bietet keinerlei sichere Umsetzung - so "billig" geht es (leider) nicht. Genau deswegen hatte ich auch angefragt, was als Eingabe erwartet wird und was zum Schluss wieder herauskommen soll.
Die Verwendung von "+" als String-Concenator ist syntaktisch inkorrekt - hierfür ist "&" zu verwenden.
Eine Änderung des Feldes wird verworfen, wenn an achter Position ein "-" steht. Dieser Zustand wird niemals erreicht.

Der Algorithmus sollte eher wie folgt aussehen:
- Entferne aus der MAC-Adresse alle unzulässigen Zeichen (alles ausser "0..9" und "A".."F"
- Länge <> 10 ? Fehler ! Achtung - einige Programme bieten bereits weitsichtig 12stellige MACAdressen an bzw. lesen diese aus und bieten sie so an.
- Loope durch die so erhaltene "eingedampfte" MAC-Adresse und baue den String neu auf. Nach jeweils zwei Zeichen füge ein "-" ein.

HTH,
Bernhard

Offline mh70220

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
    • Meine HP
Re: Eingabeumsetzung nur einmalig ausfuehren?
« Antwort #8 am: 22.01.05 - 14:46:50 »
Ich weis das der Quell Code nicht perfekt ist. Das kann man von einem Anfänger in LotusScript ja auch nicht erwarten. Oder?

- Entferne aus der MAC-Adresse alle unzulässigen Zeichen (alles ausser "0..9" und "A".."F"

- Loope durch die so erhaltene "eingedampfte" MAC-Adresse und baue den String neu auf. Nach jeweils zwei Zeichen füge ein "-" ein.


Die Idee mit dem Entfernen aller unzulaessingen Zeichen ist mir auch schon gekommen, nur kenne ich den Befehl in LotusScript nicht, um dies realisieren.
Das Geleiche gilt fuer das einfuegen eines "-" nach jedem zweiten Zeichen.

Kann da jemand mal ein Beispiel geben.

Matthias
Notes 5.05
Server 5.05
Windows 2000

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Eingabeumsetzung nur einmalig ausfuehren?
« Antwort #9 am: 22.01.05 - 15:39:47 »
Ich weis das der Quell Code nicht perfekt ist. Das kann man von einem Anfänger in LotusScript ja auch nicht erwarten. Oder?

Genau deswegen habe ich ja auch zweimal angefragt: Was wird als Eingabe erwartet, und was soll unten wieder herauskommen ? Gerade als Anfänger sollte man die Postings, für die sich andere immerhin Zeit genommen und Mühe gegeben haben, schon genau lesen.

Hier ein Beispiel (!) für das Normalisieren einer 10stelligen MAC-Adresse. Um das Testen zu erleichtern, ist der Code für einen Button bestimmt und liest den Inhalt des Feldes MACAddress aus. Das ganze liesse sich leicht in eine Function auslagern und somit auch variabler gestalten (zum Beispiel hinsichtlich der erlaubten Länge der MACAddress oder der einzufügenden Zeichen und so weiter.
Die Prüfung / Umsetzung würde ich im PostRecalc-Event durchführen.

HTH,
Bernhard

Code
Sub Click (Source As Button)
	
	Dim ws As New NotesUIWorkspace
	Dim uidocCurrent As NotesUIDocument
	Dim docCurrent As NotesDocument
	
	Dim szOrig As String
	Dim szTemp As String
	Dim szNormalized As String
	Dim iLoop As Integer
	
	On Error Goto ErrorRoutine
	
	'Get the field value:
	Set uidocCurrent = ws.CurrentDocument
	Set docCurrent = uidocCurrent.Document
	szOrig = docCurrent.MACAddress (0)
	If szOrig = "" Then 
		Exit Sub
	End If
	
	'Switch to Uppercase only:
	szOrig = Ucase (szOrig)
	
	'Remove all characters which can't belong to a MAC address:
	szTemp = ""
	For iLoop = 1 To Len (szOrig)
		If Instr ("01234567890ABCDEF", Mid$ (szOrig, iLoop, 1)) > 0 Then
			szTemp = szTemp & Mid$ (szOrig, iLoop, 1)
		End If
	Next
	
	If Len (szTemp) <> 10 Then
		Messagebox "This MAC address is invalid !"
		Exit Sub
	End If
	
	'Build the normalized MAC address:
	szNormalized = ""
	For iLoop = 1 To Len (szTemp)
		szNormalized = szNormalized & Mid$ (szTemp, iLoop, 1)
		If (iLoop / 2 = Int (iLoop / 2)) And (iLoop < Len (szTemp)) Then
			szNormalized = szNormalized & "-"
		End If
	Next
	
	Messagebox szNormalized
	
	Exit Sub
	
ErrorRoutine:
	Messagebox "An run-time error occured: " & Error$  & " (no. " & Cstr (Err) & " in line " & Cstr (Erl) & ")"
	Exit Sub
End Sub

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Eingabeumsetzung nur einmalig ausfuehren?
« Antwort #10 am: 22.01.05 - 16:23:32 »
Nachtrag: Man könnte das ganze natürlich auch pur auf Basis von @functions aufbauen, in dem man eine MAC-Adresse in fünf einzelne Felder aufteilt und diese dann prüft (und ggf. in ein weiteres berechnetes Feld zusammenführt).
Hier die Formeln für eines dieser Felder (MACPart1):

Eingabeumsetzung:
@Uppercase (MACPart1)

Eingabevalidierung:
@If (@Length (MACPart1) != 2; @Failure ("Please enter a two character value here !");
         @Matches (MACPart1; "+{0-9A-F}"); @Success;
         @Failure ("This field contains invalid characters !"))

HTH,
Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz