Autor Thema: Sortierung von UnprocessedDocuments  (Gelesen 3093 mal)

Offline webchild

  • Junior Mitglied
  • **
  • Beiträge: 94
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Sortierung von UnprocessedDocuments
« am: 19.10.04 - 10:48:00 »
Hallo!

Ich verwende einen Agenten der die UnprocessedDocuments einer Ansicht (also eigentlich der Datenbank und das ist wahrscheinlich mein Problem), sprich die markierten Dokumente in einer Collection sammelt und bestimmte Felder dann via Script in einen Word Serienbrief überträgt.

Mein Problem:
Die erste Spalte der Ansicht ist durchnummeriert, aber das hat keinen Einfluß auf die Reihenfolge der Inhalte im Serienbrief, soll es aber!  ???
 
Hat vielleicht jemand eine Idee wie ich die Sortierung der Collection der UnprocessedDocuments steuern könnte?

Grüße, Krista
« Letzte Änderung: 28.10.04 - 13:24:32 von webchild »
Grüße, Krista

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Sortierung von UnprocessedDocuments
« Antwort #1 am: 19.10.04 - 10:56:15 »
Geht nicht, ausser man programmiert es selber

A-Bär: Wort kann das, beim Serienbriefassistenten gibt es einen Abschnitt "Abfrageoptionen" und dort kann man die Datensätze sortieren lassen
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

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: Sortierung von UnprocessedDocuments
« Antwort #2 am: 19.10.04 - 11:25:20 »
Hi,

das hab ich mal im Web gefunden:

Zitat
Quicksort for a document collection

Since getting having an unsorted DocumentCollection is generally a pain, I've
written some code that's pretty quick in sorting these documents on the fly.
This uses a QuickSort algorithm, instead of the much slower bubble sorts that
seem to be floating out here...

I actually borrowed the CollectionToArray code from this board a while back,
but it also used a bubble sort routine that was way too slow.

This code should be able to be used as is. I've used this method in several
DB's with no changes since the initial write. The only thing you should have
to change is the variable which tells it which field to sort on (explained
below)...

Sub CollectionToArray ( dc As NotesDocumentCollection)

Dim doc As NotesDocument
Dim k As Long
k = dc.Count
If k<>0 Then
Redim da( 1 To k+1) As NotesDocument
Set doc = dc.GetFirstDocument
For i=1 To k
Set da(i) = doc
Set doc = dc.GetNextDocument(doc)
Next
End If

'Need to add a value at the end that will always be greater than all
other values
Set da(k+1) = dirDB.CreateDocument
da(k+1).Lastname = "ZZZZZZZZ"

End Sub

Function swap(i As Integer,j As Integer) As Variant
Dim temp As NotesDocument

Set temp = da(i)
Set da(i) = da(j)
Set da(j) = temp

End Function

Sub QuickSort (leftpos As Integer, rightpos As Integer)
Dim i As Integer
Dim j As Integer
Dim pivot As String
If (leftpos < rightpos) Then
i=leftpos
j=rightpos + 1
pivot =
da(leftpos).GetFirstItem(key).Text
Do
Do
i=i+1
Loop While da(i).GetFirstItem(key).Text<pivot And
i<=rightpos
Do
j=j-1
Loop While da(j).GetFirstItem(key).Text > pivot And
j>=leftpos
If (i<j) Then
Call swap(i, j)
End If
Loop While (i<j)
Call swap(leftpos,j)
Call QuickSort(leftpos,j-1)
Call QuickSort(j+1,rightpos)
End If

End Sub

These need to be public variables, so place them in your "Declarations":

Dim s As NotesSession
Dim db As NotesDatabase 'The current database
Dim da As Variant
Const key = "LastName" 'This the name of the FIELD you want to sort on

Now, how to use this stuff...

In your Initialize, or wherever you're calling this from:
1) Get your DocumentCollection (here: dc)
2) Call CollectionToArray(dc) 'just creates an array of your documents so that
we can re-order them
3) Call QuickSort(Lbound(da), Ubound(da)-1) 'actually sorts your documents
4) Redim Preserve da( 1 To Ubound(da)-1) As NotesDocument 'just chops off the
'ZZZZZ' value we needed as a 'high' value (see CollectionToArray routine)
5) Forall doc In da ... End ForAll 'Use this to loop through your sorted
documents

Remember, the DocumentArray (da) is just an array of documents, so you can
reference the 'doc' in your ForAll and any of it's properties, fields, etc.
just like any other document.

Let me know if you have any problems, or just to let me know you found this
useful...

Steve Held
Paxion Corporation

Anpassung:
Replace the
For i=1 To k
Set da(i) = dc.GetNthDocument(i)
Next

with the appropriate GetNextDocument() code instead for some addtl. speed.
GetNthDocument is much slower than GetNextDocument....


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

Offline webchild

  • Junior Mitglied
  • **
  • Beiträge: 94
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Sortierung von UnprocessedDocuments
« Antwort #3 am: 19.10.04 - 12:40:11 »
@Axel
Danke, habe die Sortierung eingebunden und es klappt perfekt!
Jetzt nur noch selber nachvollziehen können! :)

Ich wollte es erst auf dem Weg versuchen, dass ich die markierten Dokumente mit denen in der ja schon sortierten Ansicht vergleiche, aber das wäre nur für diesen Fall einsetzbar, im Gegensatz zu so einer Sortierung!

Noch mal Danke! :D

Grüße, Krista

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: Sortierung von UnprocessedDocuments
« Antwort #4 am: 19.10.04 - 13:05:29 »
Hi,

eine andere Alternative wäre noch, den Inhalt der Collection in einen Ordner (am besten vom Typ SPOFU), der entsprechend sortiert ist, schieben. Dann kann man mit GetFirst- und GetNextDocument den Ordner auslesen und hat die entsprechende Sortierung.

Vorteil der Lösung ist, dass man auch umfangreichere Sortierungen abbilden kann. Die Nachteile: man muss dafür sorgen, dass der Ordner immer wieder geleert werden muss und die generellen Probleme bei der Verwaltung von prinvaten Ordnern in Notes.

Ich hab diese Lösung schon mal realisiert und sie läuft bisher ohne grössere Zwischenfälle.


Axel

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

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Sortierung von UnprocessedDocuments
« Antwort #5 am: 19.10.04 - 13:27:19 »
Alles gut und recht, ich sehe aber immer noch nicht ein, warum man das nicht Word machen lässt, dort ist es gelöst und dieses Rad braucht gewiss nicht neu erfunden zu werden ....
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

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: Sortierung von UnprocessedDocuments
« Antwort #6 am: 19.10.04 - 13:35:09 »
Hi,

wenn du den Serienbrief direkt in Word erstellst, ist das sicherlich möglich. Wenn aber über OLE aus Notes heraus ein Serienbrief erstellt wird, dann hast du keine Chance eine Sortierung anzugeben.


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

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Sortierung von UnprocessedDocuments
« Antwort #7 am: 19.10.04 - 13:42:46 »
a) Wozu gibt es in Word Dokumentvorlagen, in denen man das hinterlegen kann?

b) wozu gibt es VBA, mit dem man über die COM Schnittstelle die entsprechenden Parameter angeben kann?
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

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: Sortierung von UnprocessedDocuments
« Antwort #8 am: 19.10.04 - 13:57:42 »
Hi,

zu b)

Ich habe mir die Parameter des MailMerge-Objektes angeschaut und nichts über Sortierung gefunden. Selbst beim Makro aufzeichnen bleiben die Sortiereinstellungen aussen vor.

zu a)

Hatte ich auch mal versucht, hat aber auch nicht funktioniert.


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

Offline webchild

  • Junior Mitglied
  • **
  • Beiträge: 94
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Sortierung von UnprocessedDocuments
« Antwort #9 am: 19.10.04 - 14:04:24 »
@Semeaphoros
Wie Axel habe ich a) auch versucht, aber ich muß ja die Vorlage von der Quelle trennen und wenn ich das mache, dann gelten auch die Abfrageoptionen nicht mehr!

@Axel
Das mit dem Ordner schaue ich mir mal an!
Danke!

Grüße, Krista
Grüße, Krista

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Sortierung von UnprocessedDocuments
« Antwort #10 am: 19.10.04 - 14:07:28 »
Das mit dem Makro aufzeichnen liefert mir folgendes Resultat:

Code
'
' Makro1 Makro
' Makro aufgezeichnet am 19.10.2004 von LIGO INFORMATIK
'
    ActiveDocument.MailMerge.DataSource.QueryString = _
        "SELECT * FROM C:\temp\WordMerge.txt ORDER BY CompanyName" & ""


Zu Vorlage: Stimmt, dass man es trennen muss und als normales Doc ablegen, damit geht es verloren. Das obige Makro zeigt aber, wie man das dann über COM wieder hinbekommt.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

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: Sortierung von UnprocessedDocuments
« Antwort #11 am: 19.10.04 - 15:52:18 »
@Semeaphros

Danke für den Hinweis. Das war mir so nicht bekannt. Ich werde das mal testen.
Würde mir einiges ersparen.

Man lernt eben nie aus.  :D


Axel

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

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Sortierung von UnprocessedDocuments
« Antwort #12 am: 19.10.04 - 23:15:03 »
Zur Vollständigkeit: Das hab ich in Word2000 gemacht.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Sortierung von UnprocessedDocuments
« Antwort #13 am: 19.10.04 - 23:29:05 »
Interessant für mich ist der "Sort DocCollection"-Code von Axel:

Es wird da nämlich nicht eine leere DocCollection gefüllt, dazu hatte nämlich Jens sehr berechtigte Hinweise geäußert:
Leere NotesDocumentCollection: Wie macht Ihr das?

Nichtsdestotrotz sehe ich es auch wie Jens, das ganze direkt in Word zu erledigen.
Matthias

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


Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Sortierung von UnprocessedDocuments
« Antwort #14 am: 20.10.04 - 07:31:05 »
@TMC

... eine leere NotesDocumentCollection kannst du erzeugen, indem du alle Profildokumente eines nicht vorhandenen Profiles initialisiert

Dim session as New NotesSession
Dim dbThis As NotesDatabase
Dim dc As NotesDocumentCollection

Set dbThis = session.CurrentDatabase
Set dc = dbThis.GetProfileDocCollection( "dummy" )

... wenn es keine "dummy"-Profile gibt ist die Collection leer...

Toni
Grüßle Toni :)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Sortierung von UnprocessedDocuments
« Antwort #15 am: 20.10.04 - 19:37:46 »
@Toni:
Danke, ist eine weitere interessante Alternative zu
   Set coll = db.GetDocumentByUNID(db.Views(0).UniversalID).Responses
   Set coll = view.GetAllDocumentsByKey("xxyyzzxxyyzz")

Matthias
Matthias

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


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz