Autor Thema: Wieder mal eine Datumfrage  (Gelesen 4186 mal)

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Wieder mal eine Datumfrage
« am: 22.09.10 - 14:03:40 »
Ein Frage....

Bei einem Archiv eines Kollegen fehlen Dokumente in der Inbox. Eigentlich kein Problem, da es bei IBM ein tolles Script gibt:
aber....

Code
Sub Initialize 
	Dim s As New notessession
	Dim db As notesdatabase
	Dim fDoc As NotesDocument ' Document in folder
	Dim ad As notesview ' All Documents view
	Dim aDoc As notesdocument ' document in All Docs view
	Dim fUNID() As String ' array of UNID's of docs in folders
	Dim i As Integer ' UNID array index
	Dim deldate As notesitem
	Dim Chair1 As notesitem
	Dim startdate As String

Sub Initialize 
	Dim s As New notessession
	Dim db As notesdatabase
	Dim fDoc As NotesDocument ' Document in folder
	Dim ad As notesview ' All Documents view
	Dim aDoc As notesdocument ' document in All Docs view
	Dim fUNID() As String ' array of UNID's of docs in folders
	Dim i As Integer ' UNID array index
	Dim deldate As notesitem
	Dim Chair1 As notesitem
	Dim startdate As Variant
	Dim enddate As Variant
	
	
	i =0
	Set db = s.CurrentDatabase
	
	
	Redim fUNID(0)
	
' Build UNID array by looping through folders, then their documents 
	
	startdate=(Inputbox("Startdatum eiingeben"))
enddate=(Inputbox("Endatum eingeben"))
	
	Forall view In db.views 
		If view.IsFolder And Not view.Name=("($All)") Then 
			Set fDoc = view.GetFirstDocument
			While Not fDoc Is Nothing
				Redim Preserve fUNID(i)
				fUNID(i) = fDoc.UniversalID
				i=i+1
				Set fDoc = view.GetNextDocument(fDoc)
			Wend
		End If
	End Forall
	
' Loop through docs in the All Documents view and compare UNIDs to each doc in the array 
	Set ad = db.GetView("($All)")
	Set aDoc = ad.GetFirstDocument
	
	
	While Not aDoc Is Nothing 
		i = 0
		Do While i <= Ubound(fUNID) 
			If fUNID(i) = aDoc.UniversalID Then 
				Exit Do
			End If
			i = i + 1
		Loop
		Set deldate = adoc.getfirstitem("delivereddate")
		Set Chair1 = adoc.getfirstitem("CHAIR")
		If i > Ubound(fUNID) And Not deldate Is Nothing And Chair1 Is Nothing Then 
			Call adoc.PutInFolder( "($Inbox)") 
		End If
		Set aDoc = ad.GetNextDocument(adoc)
	Wend 
	
End Sub

..... die Datenbank ist zu groß und beinhaltet zuviele Dokumente und ich würde deswegen das Auswahldatum gerne eingrenzen.
Aus dem Grund würde ich gerne ein Start und ein Enddatum setzen.

Irgendwie fehlt mir aber noch die Idee, wie ich diese Werte jetzt in das Script mit verkaspern kann??
Ich hab mich durch einige Posts gelesen, wie auch die Hilfe, aber was jetzt da das richtige dafür ist, bin ich noch nicht ganz schlau draus geworden.
Notesdaterange mit start und enddate  ??? Oder doch anders ...

Bräuchte mal einen Tipp von euch

Danke im voraus...
Gruß Ulli

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Wieder mal eine Datumfrage
« Antwort #1 am: 27.09.10 - 14:08:06 »
Moin,moin,

da keiner antwortet, trau ich mich einfach mal. So wie ich das sehe, müsste ja nur der While-Wend Teil der Forall Schleife entsprechend erweitert werden in der Art:

Forall view In db.views
   If view.IsFolder And Not view.Name=("($All)") Then
      Set fDoc = view.GetFirstDocument
         

      While Not fDoc Is Nothing
         if cdat(fdoc.PostedDate(0)) >= cdat(StartDate) then
            if cdat(fdoc.PostedDate(0)) <= cdat(EndDate) then
               Redim Preserve fUNID(i)
               fUNID(i) = fDoc.UniversalID
               i=i+1
            end if
         end if

         Set fDoc = view.GetNextDocument(fDoc)
      Wend
   End If
End Forall


Dann dürften eigentlich nur die Dokumente ins Array geschrieben werden, die zwischen Start- und EndDate liegen. Ob StartDate und EndDate gültige Datumswerte enthalten, sollte natürlich vorher mit IsDate und dergleichen geprüft werden.
Gruß
Demian

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Re: Wieder mal eine Datumfrage
« Antwort #2 am: 29.09.10 - 11:13:23 »
Hallo Demian,

ich hatte schon gedacht der Beitrag versinkt wie so manch anderer im Nirwana....

Ich hab mal Deine Zeilen mit aufgenommen, aber so effektiv ist das noch nicht.
Im ersten Step habe ich mal noch keine Überprüfung auf den richtigen Zeitwert, da ich zwei Inboxen habe, in denen ich das Datum so eingeben kann, wie es im postedDate steht.

Ohne Deine zwei Zeilen meckert er gleich mit Overflow Buffer usw.

Mit der Überprüfung auf das Start und Enddate braucht er halt ewig..... In der Datenbank sind 50000 Dokumente. Ich hab gestern nach zwei Stunden abgebrochen.
Es gibt doch bestimmt eine Möglichkeit wie ich von vorherein das Array festlegen kann  :-:

Ich werd' mich noch mal reingraben.... aber erst nach meinem Urlaub.

Danke trotzdem
Gruß Ulli

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Wieder mal eine Datumfrage
« Antwort #3 am: 29.09.10 - 11:59:10 »
der Overflow wird daher rühren, weil i nur als integer deklariert ist. Müsste man dann auf long ändern. Würde aber bedeuten, das in irgendeinem der Ordner über 32.767 Dokumente sind.

Zitat
Im ersten Step habe ich mal noch keine Überprüfung auf den richtigen Zeitwert, da ich zwei Inboxen habe, in denen ich das Datum so eingeben kann, wie es im postedDate steht.

mit Überprüfung meinte ich, die Überprüfung ob auch wirklich korrekte Datumswerte in die Input-Boxen eingegeben wurden. Wenn da jemand bei Startdate Fleisch und bei  Enddate Gulasch eingibt, würde das so nicht zu dem gewünschten Ergebnis führen.

Gruß
Demian

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Wieder mal eine Datumfrage
« Antwort #4 am: 29.09.10 - 12:18:52 »
Das Hauptproblem besteht wohl darin, dass Du, wenn Du Dokumente aus einem Ordner oder einer Ansicht holst, keine Einschränkung bzgl. des Erstelldatums machen kannst. Das geht z.B. bei db.Search, dann fehlt Dir aber der Bezug zur Ansicht / zum Ordner.

Da Du also alle Dokumente der Ansichten / Ordner anschauen musst, bringt Dich das in der Performance nicht wirklich weiter, wenn Du da eine Abfrage über das Erstelldatum nachträglich einbringst. Der Zeitgewinn ist da nicht so erheblich.

Dass der Beitrag versinkt, liegt m.E. eher daran, dass niemand eine vernünftige Lösung präsentieren kann. Ein view.Search oder folder.Search wäre hilfreich (also alle Dokumente einer Ansicht / eines Ordners, die einer Selektionsformel entsprechen), aber das gibt es (noch) nicht.

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Wieder mal eine Datumfrage
« Antwort #5 am: 29.09.10 - 16:30:07 »
Hallo,

Koennte man nicht hiermit eventuell doch das gewollte erreichen?

siehe hierzu NotesViewEntryCollection

Code
Set vecol = vw.AllEntries
Call vecol.FTSearch(...)

Eigentlich sollte nun in der ViewEntryCollection nur noch das enthalten
was den angegebenen Suchkriterien enspricht.


Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Wieder mal eine Datumfrage
« Antwort #6 am: 30.09.10 - 03:41:23 »
ich hatte schon gedacht der Beitrag versinkt wie so manch anderer im Nirwana....

Hallo Ulli,

diese Aussage scheint mir nicht ganz fair zu sein. Wenn - sehr selten - bei AtNotes eine Frage "im Nirwana verschwindet", so steht das auch meist mit der eigentlichen Frage in Verbindung. Bei Deiner Frage ist es mir jedenfalls so gegagngen: Ich habe sie gelesen (! - immerhin hängen da ja neben der Problembeschreibung einige Zeilen Code dran) und dann mit dem internen Vermerk "x-fach-Quatsch" anderen Tagesaufgaben geopfert. Ich versuche mich jetzt trotzdem mal daran, zu einer Lösung beizutragen:

Da ich das Ausgangsproblem schon nicht verstehe:
Es geht um ein Mail-Archiv. Dort scheinen empfangene Dokumente in keinem Ordner abgelegt zu sein. Warum willst Du diese jetzt in der Inbox anzeigen (und nicht in einem "FAIL!"-Ordner)?
Du müsstest bitte dieses eigentliche Problem erläutern.

Weiters: Du schreibst, Du hättest "dieses tolle Script bei der IBM gefunden". Da der Code alles andere als toll ist, sondern einfach nur ausgemachter Schwachsinn, würde mich sehr interessieren, wo Du meinst, dieses Machwerk auf IBM-Seiten gefunden zu haben.

Wenn meine Ahnung stimmt, was Du erreichen willst, dann ist der allererste AtNotes-BestPractices-Artikel
http://atnotes.de/index.php/topic,13503.0.html
für Dich ein erster Anlaufpunkt.

Bernhard

Glombi

  • Gast
Re: Wieder mal eine Datumfrage
« Antwort #7 am: 30.09.10 - 08:50:38 »
Das Script ist ungeschickt programmiert und daher eher nicht von IBM sondern aus einem obskuren Forum  ;D
Das Array Handling im Zusammenhang mit Redim Preserve ist der Performancekiller!

Besser so:
Du kannst eine Ansicht erstellen, die in der Zugriffsformel mittels
SELECT
(@IsNotMember("A"; ExcludeFromView) & IsMailStationery != 1 & Form != "Group" & Form != "Person") &
DeliveredDate >= [01.01.2009]

nur die Dokumente aus der View $ALL anzeigt, die ab dem 01.01.2009 geliefert wurden.

In dem Agenten gehts Du unter "Dokumentauswahl" und klickst unten "Bedingung hinzufügen". Dort wählst Du "In Ordner" und dann wählst Du die neue Ansicht aus.

Die Dokumente in der Ansicht bekommst Du dann mit
...
dim dc as NotesDocumentCollection
...
set dc = db.UnprocessedDocuments

In der Collection sind dann alle in Frage kommenden Dokumente.

Anschließen iterierst Du mit Deinem bestehenden Script über die Folder. Dann mit
Call notesDocumentCollection.DeleteDocument( document )
das Dokument aus der dc Collection entfernen.

Übrig bleiben dann diejenigen Dokumente, die in keinem Folder sind.  Diese kannst Du dann mit
Call notesDocumentCollection.PutAllInFolder( folderName$ [, createonfail ] )
in den $Inbox Ordner schieben.


Andreas

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Re: Wieder mal eine Datumfrage
« Antwort #8 am: 18.10.10 - 14:43:46 »
Hallo zusammen,

erst einmal vielen Dank für Eure ganzen Antworten... bin heute erst wieder aus dem Urlaub zurückgekommen, daher keine Rückmeldung von meiner Seite.

Das Script ist ungeschickt programmiert und daher eher nicht von IBM sondern aus einem obskuren Forum  ;D
Weiters: Du schreibst, Du hättest "dieses tolle Script bei der IBM gefunden". Da der Code alles andere als toll ist, sondern einfach nur ausgemachter Schwachsinn, würde mich sehr interessieren, wo Du meinst, dieses Machwerk auf IBM-Seiten gefunden zu haben.

Das Script ist tatsächlich von IBM...
http://www-01.ibm.com/support/docview.wss?rs=475&context=SSKTWP&context=SSKTMJ&q1=inbox&uid=swg21104973&loc=en_US&cs=utf-8&lang=en

über die Qualität der Programmierung kann ich nicht so viel sagen, da ich absoluter Lotus Script Beginner bin. Ich gehe davon aus, wenn ich zu meinem Problem bei IBM etwas finde, daß es entsprechende Qualität hat, was hier aber wohl nicht der Fall ist.

Da ich das Ausgangsproblem schon nicht verstehe:
Es geht um ein Mail-Archiv. Dort scheinen empfangene Dokumente in keinem Ordner abgelegt zu sein. Warum willst Du diese jetzt in der Inbox anzeigen (und nicht in einem "FAIL!"-Ordner)?
Du müsstest bitte dieses eigentliche Problem erläutern.

Noch einmal zu meinem Problem. Einer unserer Hauptabteilungsleiter ruft bei mir an und sagt mir seine Mails sind aus dem Archiv verschwunden... Als ich die Datenbank überprüft habe, war es so wie von mir vermutet daß die Mails da sind, jedoch nicht in der Inbox dargestellt werden, sondern "nur" unter Alle Dokumente.
Nach einem leider erfolglosen Telefonat meinerseits war unser HAL nicht davon zu überzeugen, daß er ja so arbeiten kann, er hätte seine Mails gerne wieder in der Inbox.

Bernhard, der Hinweis auf der Hinweis auf den Best Practise Artikel ist in diesem Fall fast korrekt. Ich will wissen, welche Mails haben den Verweis auf den Ordner Inbox und kopiere sie dann dahin...

ich hatte schon gedacht der Beitrag versinkt wie so manch anderer im Nirwana....
diese Aussage scheint mir nicht ganz fair zu sein. Wenn - sehr selten - bei AtNotes eine Frage "im Nirwana verschwindet", so steht das auch meist mit der eigentlichen Frage in Verbindung.

.... ich kann und will mich ja auch nicht beklagen, da eigentlich alle Fragen die ich hier gestellt habe, erstens wohl verständlich waren und zweitens zu 95% so beantwortet wurden, daß mein Problem gelöst werden konnte.
Also bitt nicht so verbissen reagieren, Ihr leistet hier echt eine klasse Arbeit neben Euren Jobs her... ;D

Ich werde mir mal den Vorschlag von Glombi genauer anschauen und sehen ob ich da weiter komme. Vielleicht kann ich unseren HAL aber auch noch einmal davon überzeugen, daß der Aufwand zu groß für eine "kosmetische Arbeit" in diesem Umfang ist.

Danke mal.

Gruß Ulli

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz