Autor Thema: Scriptoptimierung  (Gelesen 1963 mal)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Scriptoptimierung
« am: 17.10.02 - 12:13:50 »
Hallo Leute,
ich habe folgende Funtion das QueryOpen Ereignis des Ordners eigene Dokumente hinterlegt (bzw. ic rufe diese Funktion aus meiner Library.
Das Skript ist nicht besonders performant, aber es funktioniert.
Hat jemand eine Idee, wie ich das Skript verbessern könnte ?

Das braucht ungefähr 6 Sekunden, bei genausovielen Dokumenten in der View "(e4vwinternmitarbeiter)"

Hat jemand eine Idee ?


Vielen Dank
Don Pasquale



Code
Function OrdnerEigeneDokumenteAktualisieren 
   Dim ws As NotesUiWorkspace   
   Dim workspace As New NotesUiWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db = session.CurrentDatabase   
   Dim user As String   
   user = session.UserName   
   Dim view As NotesView
   Dim temp As Variant
   Dim dc As NotesDocumentCollection
   Dim uidoc As NotesUIDocument 
   Dim doc As notesdocument    
   Set view = session.Currentdatabase.GetView("(e4vwInternMitarbeiter)")       
   Set dc = view.GetAllDocumentsByKey(user, True)
   Set doc  = dc.GetFirstDocument 
   
   While Not doc Is Nothing 
      Call doc.PutInFolder( "Eigene Dokumente" )
      Set doc = dc.getnextdocument(doc) 
   Wend
   Set view = session.Currentdatabase.GetView( "Eigene Dokumente" )       
   Call workspace.ViewRefresh
End Function

Offline tower

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
    • Uwe Schräpler IT-Service
Re:Scriptoptimierung
« Antwort #1 am: 17.10.02 - 12:28:54 »
Function OrdnerEigeneDokumenteAktualisieren
  Dim ws As NotesUiWorkspace  
   Dim workspace As New NotesUiWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db = session.CurrentDatabase  
   Dim user As String  
   user = session.UserName  
   Dim view As NotesView
   Dim temp As Variant
   Dim dc As NotesDocumentCollection
  Dim uidoc As NotesUIDocument
   Dim doc As notesdocument    
   Set view = session.Currentdatabase.GetView("(e4vwInternMitarbeiter)")      
   Set dc = view.GetAllDocumentsByKey(user, True)
   Set doc  = dc.GetFirstDocument
   
   While Not doc Is Nothing
      Call doc.PutInFolder( "Eigene Dokumente" )
      Set doc = dc.getnextdocument(doc)
   Wend
  Set view = session.Currentdatabase.GetView( "Eigene Dokumente" )      
   Call workspace.ViewRefresh
End Function

die fetten Zeilen sind meiner meinung nach unnötig

Offline tower

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
    • Uwe Schräpler IT-Service
Re:Scriptoptimierung nochwas
« Antwort #2 am: 17.10.02 - 12:31:01 »
Set view = session.Currentdatabase.GetView("(e4vwInternMitarbeiter)")      

geht einfacher mit

set view = db.GetView("(e4vwInternMitarbeiter)")      

weil, db hast du schon belegt...

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Scriptoptimierung
« Antwort #3 am: 17.10.02 - 12:48:44 »
Hallo Uwe,

vielen Dank, das habe ich glatt übersehen,
leider beeinflusst es die Performanz nicht besonders.
Ich vermute mal, das vor allem das PutInFolder so lange dauert

hmm
Don Pasquale




Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re:Scriptoptimierung
« Antwort #4 am: 17.10.02 - 12:50:23 »
So, hab auch mal ein bisschen rumoptimiert:
Hab auch gleich ne SUB draus gemacht; eine Funktion ohne Rückgabewert macht irgendwie keinen Sinn.

Sub OrdnerEigeneDokumenteAktualisieren

Dim ws As New NotesUiWorkspace
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim dc As NotesDocumentCollection

user$ = s.UserName  

  Set db = s.CurrentDatabase  
  Set view = db.GetView("(e4vwInternMitarbeiter)")      
  Set dc = view.GetAllDocumentsByKey(user$, True)
'oder gleich mit
'   Set dc = view.GetAllDocumentsByKey(s.UserName, True)

  Call dc.PutAllInFolder( "Eigene Dokumente" )

  Set view = db.GetView( "Eigene Dokumente" )      
  Call ws.ViewRefresh
End Sub

Gegebenenfalls kann man dieses ganze DIM zeugs auch aus der Sub rausnehmen und in den Deklarationsteil packen.
Dann brauchst du den Kram nicht bei jeder Sub oder Function neu zu definieren.

dann hätte man idealerweise folgende Sub

Sub OrdnerEigeneDokumenteAktualisieren
   Set db = s.CurrentDatabase  
   Set view = db.GetView("(e4vwInternMitarbeiter)")      
   Set dc = view.GetAllDocumentsByKey(s.UserName, True)
   Call dc.PutAllInFolder( "Eigene Dokumente" )
   Set view = db.GetView( "Eigene Dokumente" )      
   Call ws.ViewRefresh
End Sub


eknori
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Scriptoptimierung
« Antwort #5 am: 17.10.02 - 13:10:57 »

Danke Eknori,


man kann also gleich die Collection als ganzes
ansprechen. Muss man erstmal drauf kommen.

Es ist jetzt bereits Faktor 2 schneller und ich vermute
mal dass je mehr Dokumente in der View sind
desto größer wird der Faktor.


Super


Don Pasquale




 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz