Domino 9 und frühere Versionen > Entwicklung

Durchsuchen einer Ansicht nach zwei Feldern

<< < (5/7) > >>

manuel:
Obwohl, ... , wenn du vorerst mit einer einfachen Listung der Dokumente in einerm simplem Textfeld zufrieden bist, könnte ich dir schon weiterhelfen. Es gibt aber eben dann nicht mehr die Möglichkeit gleich auf die Dokumente zuzugreifen, sondern müsste sich diese wieder in einer anderen Ansicht suchen.

hmarco:
Wieso nicht, das wäre erstmal schon etwas, was ich dem Chef zeigen könnte.
Paralell dazu kann ich die Geschichte mit den dynamischen Tabellen
weiter ausknobeln.

Mfg Marco

manuel:
Versuch mal dem folgenden Code. Er wird in einen Button eingefügt. Folgende Felder müssen in der Abfragemaske (ist kein Profildokument) vorhanden sein:

Produktbeschreibung
NeueVersion
Ergebnis (für die Liste die ausgegeben wird)

Ist vielleicht nicht die schönste Lösung, aber mal als vorläufiger Anhaltspunkt. Es kann sein, dass einiges nicht funktioniert, weil ich den Code nur getippt und nicht getesten habe. Also berichte wenn's nicht klappt. Ich hoffe ich habe ihn ausreichen kommentiert.


Sub Click(Source As Button)
     Dim ws As New NotesUIWorkspace
     Dim thisDoc As NotesUIDocument
     Set thisDoc = ws.CurrentDocument            'aktuelles Dokument (Abfragemaske), um Werte aus Feldern auszulesen
     
     Dim s As New NotesSession
     Dim db As NotesDatabase
     Dim view As NotesView
     Dim dc As NotesDocumentCollection            'DocumentCollection für alle Dokumente dieses Produkts und Vertragstyp "TREND"
     Dim doc As NotesDocument
     Dim keyArray(1) As String            'Schlüssel für die Suche
     Dim neueversion As Double, instversion As Double
     Dim ergebnis As String            'dieser String wird nachher in das Feld Ergebnis geschrieben
     
     Set db = s.CurrentDatabase
     'die Ansicht (ich hab sie derweil 'ProjektSuchen' genannt) muss folgerndermaßen aussehen
     '1. Spalte: Produkt, 2. Spalte: Vertragstyp, beide spalten sortiert (aufsteigend oder absteigend, egal)
     Set view = db.GetView("ProjektSuchen")
     
     keyArray(0) = thisDoc.FieldGetText("Produktbeschreibung")            'oder wie das Feld in der Abfragemaske auch immer heißen soll
     keyArray(1) = "TREND"
     
     'nun wird gesucht
     Set dc = view.GetAllDocumentsByKey(keyArray, True)      'der letzte Parameter gibt an ob exakt gesucht werden soll, das musst du entscheiden
     Set doc = dc.GetFirstDocument            'erstes Dokument der dc
     
     'nun beginnt die Schleife die alle Dokumente mit der Versionsnummer vergleicht
     While Not (doc Is Nothing)
           neueversion = thisDoc.Document.GetItemValue("NeueVersion")
           instversion = doc.GetItemValue("InstallierteVersion")
           
           'Vergleich der beiden Versionen
           If instversion < neueversion Then
                 'installierte Version ist kleiner, also werden Werte dieses Dokument dem String hinzugefügt
                 'ich bin davon ausgegangen, dass es in dem Dok. die Felder Kunde, Produkt, InstallierteVersion gibt
                 'Chr(9) ist ein Tabulator, Chr(10) eine Zeilenschaltung
                 ergebnis = ergebnis & doc.Kunde(0) & Chr(9) & doc.Produkt(0) & Chr(9) & doc.InstallierteVersion(0) & Chr(10)            
           End If
           
           Set doc = dc.GetNextDocument(doc)            'nächstes Dokument der dc
     Wend
     
     
     Call thisDoc.FieldSetText("Ergebnis", ergebnis)
     
End Sub


Mahlzeit
Manuel

hmarco:
Hallo mein Freund,

ich habe das Script soweit am laufen, dass er mir nur noch Type Mismatch anzeigt. Was für ursachen könnte das haben?

Mfg Marco

P.S.:Hier mein etwas Modifizierter Code:
Sub Click(Source As Button)
     Dim ws As New NotesUIWorkspace
     Dim thisDoc As NotesUIDocument
     Set thisDoc = ws.CurrentDocument  'aktuelles Dokument (Abfragemaske), um Werte aus Feldern auszulesen
     
     Dim s As New NotesSession
     Dim db As NotesDatabase
     Dim view As NotesView
     Dim dc As NotesDocumentCollection  'DocumentCollection für alle Dokumente dieses Produkts und Vertragstyp "TREND"
     Dim doc As NotesDocument
     Dim keyArray(1) As String  'Schlüssel für die Suche
     Dim neueversion As Double, instversion As Double
     Dim ergebnis As String  'dieser String wird nachher in das Feld Ergebnis geschrieben
     
     Set db = s.CurrentDatabase
'die Ansicht (ich hab sie derweil 'ProjektSuchen' genannt) muss folgerndermaßen aussehen
'1. Spalte: Produkt, 2. Spalte: Vertragstyp, beide spalten sortiert (aufsteigend oder absteigend, egal)
     Set view = db.GetView("Versionsabfrage")
     
     keyArray(0) = thisDoc.FieldGetText("Produktbeschreibung")  'oder wie das Feld in der Abfragemaske auch immer heißen soll
     keyArray(1) = "TREND"
     
'nun wird gesucht
     Set dc = view.GetAllDocumentsByKey(keyArray, True) 'der letzte Parameter gibt an ob exakt gesucht werden soll, das musst du entscheiden
     Set doc = dc.GetFirstDocument  'erstes Dokument der dc
     
'nun beginnt die Schleife die alle Dokumente mit der Versionsnummer vergleicht
     While Not (doc Is Nothing)
           neueversion = thisDoc.Document.GetItemValue("NeueVersion")
           instversion = doc.GetItemValue("InstallierteVersion")
           
 'Vergleich der beiden Versionen
           If instversion < neueversion Then
  'installierte Version ist kleiner, also werden Werte dieses Dokument dem String hinzugefügt
  'ich bin davon ausgegangen, dass es in dem Dok. die Felder Kunde, Produkt, InstallierteVersion gibt
  'Chr(9) ist ein Tabulator, Chr(10) eine Zeilenschaltung
                 ergebnis = ergebnis & doc.Lizenznehmer(0) & Chr(9) & doc.Produktbeschreibung(0) & Chr(9) & doc.InstallierteVersion(0) & Chr(10)  
           End If
           
           Set doc = dc.GetNextDocument(doc)  'nächstes Dokument der dc
     Wend
     
     
     Call thisDoc.FieldSetText("Ergebnis", ergebnis)
     
End Sub

manuel:
Starte bitte bevor das Script ausgeführt wird den Debugger (Datei/Extras/Debug LotusScript) und schau in welcher Zeile er den Fehler findet!

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln