Autor Thema: Problem mit "Feld History Script"  (Gelesen 2756 mal)

Offline seerow

  • Aktives Mitglied
  • ***
  • Beiträge: 180
  • Geschlecht: Männlich
  • alles wird gut........
Problem mit "Feld History Script"
« am: 07.10.04 - 17:35:47 »
Hallo zusammen,

nach langen stöbern habe ich in der Schatzkiste von eknori ein script gefunden, welches mir die geänderten Felder einen Dokumentes ausgibt.
Ich habe das script etwas an meine Wünsche angepasst. Leider gibt es noch ein kleines Problem. Das script gibt nur das erste geänderte Feld wieder.
Ich möchte aber gerne die Wiedergabe alles geänderten Feldwerte. Wo muss ich da ansetzen?


Code
Function DocHasChanged(Source As NotesUIDocument) As Integer
	Dim workspace As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Set uidoc = workspace.CurrentDocument
	Dim doc As NotesDocument
	Dim session As New NotesSession	
	Dim whennow As String
	Dim whentoday As String
	Dim nam As NotesName	
	Set doc = source.Document
	
	Set nam = New NotesName(session.UserName)
	
	whenNow = Time()
	whentoday = Today()
	
	DocHasChanged = False
	
	'Catch the 'List Item Does Not Exist' Error (In case a new item was added to the document)
	On Error 120 Goto newitem
	
	'Don't check new documents
	If Not source.IsNewDoc Then
		
	'Step through each item on the document
		Forall i In doc.items 
			nm$ = Ucase(i.name)
			If nm$ <> "$REVISIONS" And nm$ <> "$UPDATEDBY" And nm$ <> "SAVEOPTIONS" Then ' Filter out specific fields
				vl$ = itemValues(nm$)
				If vl$ <> i.Text Then
	'We have a change. 
					DocHasChanged = True
	'In this case we want to report the change and stop... you could just as easily replace the two ' lines below with other processing code such as recording the changes to a history field, etc.
	'------------------------------------------NEW------------------------------------------
					Call uidoc.FieldAppendText("fd_printer_historydate", +whentoday+" at "+whennow+ +Chr(10))
					Call uidoc.FieldAppendText("fd_printer_historyfield", nm$ +Chr(10))
					Call uidoc.FieldAppendText("fd_printer_historyold", vl$ +Chr(10))
					Call uidoc.FieldAppendText("fd_printer_historynew", i.Text +Chr(10))
					'Call uidoc.FieldAppendText("fd_printer_historynew", "Field "& nm$ &" was changed on "+whentoday+" at "+whennow+" by "+nam.Abbreviated+" from: "& vl$ &" to: "& i.Text+Chr(10))					
	'------------------------------------------NEW------------------------------------------					
					Exit Forall
				End If
			End If
		End Forall
	End If 
	
	Exit Function
	
newitem:
' This item is new
	vl$ = ""
	Resume Next
	
End Function
MFG Antonio

-----------------------------------------------------------------------

Ordentliche Menschen sind selten genial,
geniale selten Ordentlich............

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit "Feld History Script"
« Antwort #1 am: 07.10.04 - 17:51:51 »
1. Was für ein grausamer Code - geradezu ein Musterbeispiel, wie man nicht coden sollte.
2. Warum gehst Du nicht im Debugger durch den Code, da siehst Du doch sofort, an welcher Zeile "Ende Gelände" ist.
3. Du verwendest Code, verstehst ihn aber nicht (sonst hättest Du einfachst das Exit Forall gesehen - Das steht sogar im Kommentar kurz davor !). Von solchen Stunts kann man nur absolut abraten !!!
4. Der Code ist nicht vollständig.

Bernhard
« Letzte Änderung: 07.10.04 - 18:04:01 von koehlerbv »

Offline seerow

  • Aktives Mitglied
  • ***
  • Beiträge: 180
  • Geschlecht: Männlich
  • alles wird gut........
Re: Problem mit "Feld History Script"
« Antwort #2 am: 07.10.04 - 18:02:10 »
tja Bernhard wie gesagt,

der code ist nicht von mir sonder von hier -->

http://eknori.dyndns.org/knowledge/devidea.nsf/Alpha/96F26F648AC1ADAE802568550029C0C5?OpenDocument
MFG Antonio

-----------------------------------------------------------------------

Ordentliche Menschen sind selten genial,
geniale selten Ordentlich............

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit "Feld History Script"
« Antwort #3 am: 07.10.04 - 18:11:00 »
der code ist nicht von mir sonder von hier -->

Jaja, das ist mir schon bewusst, hat aber nichts mit meiner Kritik zu tun.

Ulrich brauchte ja irgendeinen Namen für seine Sammlung von Fundstücken aus der weiten Welt des www. Er hat halt "Schatzkiste" genommen. "Wundertüte" wäre vielleicht besser, denn er kann ja nun nicht jedes Fundstück einzeln begutachten oder - vor allem - Jahre später erneut beurteilen.

Ich kann nur immer wieder sagen: Verwendet keinen Code, den Ihr nicht zu hundert Prozent verstanden habt. Passt Code Eurem (Unternehmens-)Stil an. Übernehmt am besten nur die Algorithmen. Aber niemals: Oh, ich weiss nicht, warum - aber es funktioniert !

Bernhard
« Letzte Änderung: 07.10.04 - 18:37:37 von koehlerbv »

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: Problem mit "Feld History Script"
« Antwort #4 am: 07.10.04 - 18:44:58 »
Hi,

der Knackpunkt liegt in der Exit ForAll -Anweisung. Die wird bei der ersten gefundenen Änderung ausgeführt und damit wird die ForAll-Schleife beendet.

....
'------------------------------------------NEW------------------------------------------
Call uidoc.FieldAppendText("fd_printer_historydate", +whentoday+" at "+whennow+ +Chr(10))
Call uidoc.FieldAppendText("fd_printer_historyfield", nm$ +Chr(10))
Call uidoc.FieldAppendText("fd_printer_historyold", vl$ +Chr(10))
Call uidoc.FieldAppendText("fd_printer_historynew", i.Text +Chr(10))
'Call uidoc.FieldAppendText("fd_printer_historynew", "Field "& nm$ &" was changed on "+whentoday+" at "+whennow+" by "+nam.Abbreviated+" from: "& vl$ &" to: "& i.Text+Chr(10))
'------------------------------------------NEW------------------------------------------
Exit Forall  <- das muss raus!
End If
End If
End Forall
End If
...

Axel


@Bernhard
Was hast du denn an dem Code auszusetzen? Würde mich mal interessieren.
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: Problem mit "Feld History Script"
« Antwort #5 am: 07.10.04 - 18:46:35 »
Schrieb ich das nicht schon ?

Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit "Feld History Script"
« Antwort #6 am: 07.10.04 - 18:57:06 »
Ah - stop - da kam ja noch eine Frage, Axel. Sorry.

Warum ich den Code grausam finde ?
Kleiner Auszug:
- Kommentierung ist lausig (immerhin wird ja hier auch noch weiterer Code gebraucht, darauf fehlt jeder Verweis)
- Keine explizite Deklaration (siehst Du den Unterschied ? vl$ <> vI$ - mit solchem Mist kann man ggf. Stunden vertrödeln, bis man endlich den Schreibfehler gefunden hat - also ein absolutes no-no)
- Genauso wie: Das ErrorHandling ist ja "genial":
  On Error 120 Goto newitem
- Source As NotesUIDocument wird der Function übergeben, und darin wird noch einmal uidoc As NotesUIDocument instantiiert und dann wild mit beiden gemischt hantiert.
- Von logischen Fehlern wie das Handling von RTIs sehe ich jetzt mal ganz ab.

Noch tiefer mag ich mich da nicht hinein vertiefen - das Ding ist einfach nur ein zusammengeschmiertes Stück Code, das manchmal läuft.

Bernhard

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: Problem mit "Feld History Script"
« Antwort #7 am: 07.10.04 - 19:21:10 »
Schrieb ich das nicht schon ?
Bernhard

Stimmt, das stand so mittendrin, dass ich es überlesen hatte.  :-\



Warum ich den Code grausam finde ?
Kleiner Auszug:
- Kommentierung ist lausig (immerhin wird ja hier auch noch weiterer Code gebraucht, darauf fehlt jeder Verweis)
- Keine explizite Deklaration (siehst Du den Unterschied ? vl$ <> vI$ - mit solchem Mist kann man ggf. Stunden vertrödeln, bis man endlich den Schreibfehler gefunden hat - also ein absolutes no-no)
- Genauso wie: Das ErrorHandling ist ja "genial":
 On Error 120 Goto newitem
- Source As NotesUIDocument wird der Function übergeben, und darin wird noch einmal uidoc As NotesUIDocument instantiiert und dann wild mit beiden gemischt hantiert.
- Von logischen Fehlern wie das Handling von RTIs sehe ich jetzt mal ganz ab.

Ich hatte mir den Code nicht Zeile für Zeile angeschaut. Mir ist die Exit ForAll-Anweisung relativ schnell aufgefallen. Ich kann dir in allen Punkten zustimmen.

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: Problem mit "Feld History Script"
« Antwort #8 am: 07.10.04 - 19:28:58 »
Danke, Axel.

Ich zweifele ja auch manchmal an mir selbst, ob ich die Qualitätsmesslatte nicht zu hoch ansetze. Aber meine Erfahrung zeigt immer wieder: Sie liegt immer noch nicht hoch genug, und je höher die Qualität, desto geringer ist der Gesamtaufwand. Ausserdem wächst ja dabei ständig die "Werkzeugkiste", die man dank Aufwand recht gedankenlos wiederverwenden kann  ;)

Bernhard

Offline seerow

  • Aktives Mitglied
  • ***
  • Beiträge: 180
  • Geschlecht: Männlich
  • alles wird gut........
Re: Problem mit "Feld History Script"
« Antwort #9 am: 07.10.04 - 21:08:01 »
ok, ich denke das reicht mir an comments.
Danke für das feeedback.

Bernhard, ich werde mir jetzt selber was schreiben.......

Eine sehr schöne Lösung ist auch die von TMC und Michael, wirklich schick!!
MFG Antonio

-----------------------------------------------------------------------

Ordentliche Menschen sind selten genial,
geniale selten Ordentlich............

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Problem mit "Feld History Script"
« Antwort #10 am: 07.10.04 - 21:17:37 »
Eine sehr schöne Lösung ist auch die von TMC und Michael, wirklich schick!!

Du meinst wohl auch diesen über 11 Seiten gehenden Klassen-Thread:
http://www.atnotes.de/index.php?topic=16422.0
 ;D

-Michael- hat sich daraus wohl ein paar Anregungen gezogen und dann eine kompakte Klasse daraus geschrieben.
Ich denke damit kommst Du auch besser weiter, als mit dem obigen Script. Ich werde allerdings - sobald ich mehr Zeit habe - die bisherigen Ergebnisse aus dem 11-Seiten-Thread versuchen weiter zu verfeinern  ;)
Matthias

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


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz