Autor Thema: Animierte Statusbar beim löschen von Dokumenten  (Gelesen 3189 mal)

Offline Fragensteller

  • Junior Mitglied
  • **
  • Beiträge: 72
Animierte Statusbar beim löschen von Dokumenten
« am: 30.11.11 - 17:45:11 »
hi leute,
ich möchte gerne eien animierte Statusbar erzeugen.

Leider erhalte ich immer folgenden Fehler: "Falscher Datentyp in Methode NRun: FROMVAR wurde gefunden, Unknown wurde erwartet"

Wenn hier jemand weiter weiß... ich wäre doch sehr dankbar^^

Deklariert
Code
Declare Function NEMProgressBegin Lib "nnotesws.dll" ( ByVal wFlags As Integer ) As Long
Declare Sub NEMProgressDeltaPos Lib "nnotesws.dll" ( ByVal hwnd As Long, ByVal dwIncrement As Long )
Declare  Sub NEMProgressEnd Lib "nnotesws.dll" ( ByVal hwnd As Long )
Declare Sub NEMProgressSetBarPos Lib "nnotesws.dll" ( ByVal hwnd As Long, ByVal dwPos As Long)
Declare  Sub NEMProgressSetBarRange Lib "nnotesws.dll" ( ByVal hwnd As Long, ByVal dwMax As Long )
Declare Sub NEMProgressSetText Lib "nnotesws.dll" ( ByVal hwnd As Long, ByVal pcszLine1 As String, ByVal pcszLine2 As String )

Const NPB_TWOLINE = 3
Const NPB_ONELINE = 2

Aufruf
Code
        Set dc = db.Alldocuments
	allDocs = CLng(dc.Count)

	Set pb = progressbarRun(aktuell,allDocs)
	Set doc = dc.Getfirstdocument()

	While Not doc Is Nothing
		Set docnext = dc.Getnextdocument(doc)
		Call doc.Remove(true)
		Set doc = docnext 
		aktuell = aktuell+1
		Call pb.SetProgressPos(aktuell)
		Call pb.SetText("Form: ",doc.getitemValue("form")(0))
	Wend

die Function progressbarRun
Code
Function progressbarRun(aktuell As Long,range As Long)
	Dim pb As New LNProgressBar(True)
	Call pb.SetProgressRange(range)
	Call pb.SetText("This is line one","This is line two")
	Call pb.SetProgressPos(aktuell)
	Delete pb
	
End Function

Die Klasse
Code
Class LNProgressbar
	
	hwnd As Long
	
	Sub New(SecondLineVisible As Integer)
		If SecondLineVisible Then
			hwnd = NEMProgressBegin(NPB_TWOLINE)
		Else
			hwnd = NEMProgressBegin(NPB_ONELINE)
		End If
	End Sub
	
	Sub SetText(FirstLineText As String,SecondLineText As String)
		NemProgressSetText hwnd, FirstLineTExt,SecondLineText
	End Sub
	
	Sub SetProgressPos(Progresspos As Long)
		NEMProgressSetBarPos hwnd, ProgressPos
	End Sub
	
	Sub SetProgressRange(ProgressMaxElements As Long)		
		NEMProgressSetBarRange hwnd, ProgressMaxElements
		
	End Sub
	
	Sub DeltaPos(DPos As Long)
		NEMProgressDeltaPos hwnd, DPos
	End Sub
	
	Sub Delete
		Sleep 2
		NEMProgressEnd hwnd
	End Sub
End Class 

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Animierte Statusbar beim löschen von Dokumenten
« Antwort #1 am: 30.11.11 - 23:12:20 »
Aaah. Zufällig gefundener Code. Irgendwo knallt es (Du lieferst aber keine näheren Informationen). Wir sollen es jetzt richten? Eher nicht.

Timo, so funktioniert das nicht.

Bernhard

Offline Fragensteller

  • Junior Mitglied
  • **
  • Beiträge: 72
Re: Animierte Statusbar beim löschen von Dokumenten
« Antwort #2 am: 01.12.11 - 08:32:44 »
Naja, ich habe den Code tatsächlich gefunden, aber nur höfflich gefragt ob da einer weiter weiß.

Ich habe das nun mit der klasse gelasse und das Script von http://www.martinscott.com/designlibrary.nsf/scategory/EC4AB7567BF2805085256C08001DF540?opendocument genommen.
Das klappt nun...

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Animierte Statusbar beim löschen von Dokumenten
« Antwort #3 am: 01.12.11 - 09:09:27 »
Ich bin mir nicht sicher, ob das eine weise Entscheidung ist, das so zu realisieren.

Wenn ich Dich richtig verstehe, löschst Du alle Dokumente der Datenbank, und zwar jedes Dokument einzeln für sich. Da das natürlich seine Zeit dauert, zeigst Du den Fortschritt mittels Statusbar an.

Die Implementation des Fortschrittsbalkens auf diese Weise sorgt dafür, dass Dein Programm nur noch unter Windows lauffähig ist, bzw. Du musst betriebssystemabhängig den Code anpassen. Auf jeden Fall baust Du Abhängigkeiten ein, die nicht notwendig wären, und zerstörst Dir die Möglichkeit der Plattformunabhängigkeit.

Warum löschst Du nicht alle Dokumente mit NotesDocumentCollection.RemoveAll? Das geht viel schneller, spart Zeit für den Anwender und erübrigt vielleicht sogar die Fortschrittsanzeige (die dann auch nicht funktionieren würde, da nur ein Befehl abgegeben wird).

Wenn ich den Programmfortschritt anzeigen will, verwende ich simple Prints. Der Benutzer weiß dann auch, wo das Programm gerade ist. Es ist zwar nicht so schick, wie so ein Fortschrittsbalken, aber schnell gebaut und plattformunabhängig.

Warum es im Prozessablauf überhaupt notwendig ist, Dokumente zu löschen, ist ein anderes Thema. Dazu müsste man mehr über den Zweck der Anwendung wissen. Du solltest aber wissen, dass das ständige Löschen und Neuanlegen von Dokumenten in Notesdatenbanken nicht der Weisheit letzter Schluss ist.

Offline Fragensteller

  • Junior Mitglied
  • **
  • Beiträge: 72
Re: Animierte Statusbar beim löschen von Dokumenten
« Antwort #4 am: 01.12.11 - 10:01:03 »
mit NotesDocumentCollection.RemoveAll hatte ich vorher gearbeitet und bei über 200.000 Dokumente dauert es wirklich etwas lange.
Das löschen ist nur für die Entwicklungszeit. Da wir das verwendete System völlig neu schreiben und die alten Dokuemnte migrieren müssen. So säubern wir auch gleich alle Dokumente und ziehen nur die Daten die wir wirklich brauchen.
Nach dem Migrieren kommen die Berechnungen dran und wenn diese nicht zufriedenstellend sind und Fehler auftauchen müssen wir halt die Daten löschen und neu einspielen.
Das aber nur solange, bis wir alles fertig haben.

Das löschen bläht die Db auf...stimmt. von 700MB frischen Daten sitzen wir am ende das Tages bei 12GB.
Daher immer mal wieder ein nettes Compact ausführen in der Nacht.

Die Statuszeile habe ich nun eingebaut, weil dich Notes SEHR oft beim löschen aufhängt.
Und bei über 2 bis 3 Minuten warten, weiß ich gerne wo ich bin...
Und wirklich länger dauerte das jetzt beim testen auch nicht.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Animierte Statusbar beim löschen von Dokumenten
« Antwort #5 am: 01.12.11 - 10:36:06 »
Aaah. Zufällig gefundener Code. Irgendwo knallt es (Du lieferst aber keine näheren Informationen). Wir sollen es jetzt richten? Eher nicht.

Timo, so funktioniert das nicht.

Hallo Bernhard,

ohne Dich jetzt persönlich angreifen zu wollen, aber das hat mich stutzig gemacht.

ich arbeite in der überwiegenden Zahl der Fälle genau so.

1. Schritt: Code der was ich will tut in Google oder aus Büchern suchen.
2. Schritt: Code ans Laufen bringen.
3. Schritt: Code beginnen zu verstehen.
4. Schritt: Copy&Pasted Code langsam meinen Vorstellungen von Design & Architektur sowie oft auch dem skizzierten UML Domain-Modell der Anwendung anpassen. 
5. Schritt: Unit- und Integrationstests schreiben.
6. Kommentare, JavaDoc wo nötig.

Ich würd gerne Schritt 4 und 5 austauschen.

In neuen Themen stellt Schritt 2 oft die größte Herausforderung dar.


lG

Axel 
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Animierte Statusbar beim löschen von Dokumenten
« Antwort #6 am: 01.12.11 - 11:03:44 »
Bei Problemen in Punkt 2 oder 3 gibst Du in der Kommunikation aber mehr Informationen, nicht wahr, Axel?

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz