Domino 9 und frühere Versionen > Entwicklung
Index einer View
TMC:
Ich empfehle Dir dringend, ein Buch zu lesen.
Die Bible ist gut:
http://www.atnotes.de/index.php?board=26;action=display;threadid=16569
Eigentlich blöd: Du steigst frisch in die Notes-Programmierung ein, und musst Dich gleich mal mit embedded View rumschlagen (ist nicht gerade ein Motivator).
Die View existiert in der Datenbank. Du kannst via Backend-Methoden von überall auf die View-Inhalte zugreifen. Was aktuell im Frontend selektiert ist, kennen natürlich die Backend-Methoden nicht (woher auch). Und diese View ist eben auch u.a. in einer Maske embedded. Von der Maske aus gibt es in R5 keine Möglichkeit abzufragen, was via Frontend markiert ist.
Aber im Backend hast Du immer vollen Zugriff.
Leider gibt es die EntryCount property der NotesView - Klasse erst seit R6. Die gibt Dir als Integer die Anzahl der Dokumente der View wider.
In R5 kannst Du aber z.B. die Dokumente der View in eine DocCollection geben. Dann lässt Du Dir einen collection.count zurückgeben.
Wenn Du ein Codebeispiel brauchst, dann sag Bescheid ;)
7Stein:
Ja bitte, das wäre echt nett, wenn du mir das mit einem Beispiel erklären könntest.
Naja, die Motivation wird schon noch kommen, wenn sich der Durchblick einstellt oder?????
Gruß 7Stein
TMC:
Die Motivation kommt dann von ganz alleine. ;)
Hier ein Beispiel-Code. Den kopierst Du in einen Button Deiner Maske:
--- Zitat ---Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim vec As NotesViewEntryCollection
Dim intCount As Integer
Dim doc As NotesDocument
Set db = session.currentdatabase
Set view = db.GetView( "DEIN VIEWNAME" ) 'Hier Deine View eintragen
Set vec = view.AllEntries
intCount = vec.count 'Jetzt haben wir die Anzahl Doks der View in der Variable intCount
Msgbox "Die View '" & view.name & "' enthält " & intCount & " Dokumente."
Select Case intCount
Case 1:
'---> Die View hat nur einen Eintrag.
Set doc = view.GetFirstDocument
'-- so und nun mach was mit dem Dokument :-)
Case 0:
'---> Die View ist leer.
Msgbox "Die View ist leer ! Wir brechen ab."
Exit Sub
Case Else:
'---> Die View hat mehr als 1 Eintrag !
'Du rufst also Deine Auswahlbox auf zur Auswahl eines Dokumentes
End Select
End Sub
--- Ende Zitat ---
7Stein:
So, das funktioniert soweit ja schonaml, das alle Dokumente in der View gezählt werden.
Aber die Dokumente, die da gezählt werden, gehören ja nicht alle zu einem Datensatz der Maske.
In der Maske wird eine Bestellung angezeigt und in der embedded view alle Positionen zu der Bestellung. Die Positionen zu der Bestellung werden aber erst später, also nach der Abfrage, welches Dokument bearbeitet werden soll, zusammengebastelt.
So verstehe ich das zumindestens.
Ich habe also ca 18000 Dokumente gezählt, und angezeigt werden nur 6. Wie kriege ich von den sechsen heraus, ob da vielleicht nur eins vorhanden ist??????????
--- Code: ---sPos = Inputbox( "Welche Position bearbeiten?", "Position bearbeiten", "1" )
If spos <> "" Then
Call view2.Refresh()
Set detail = view2.GetDocumentByKey( thisDoc.UniversalID + "-" + sPos )
If detail Is Nothing Then
Messagebox( "Position nicht vorhanden." )
Exit Sub
End If
OK = ws.Dialogbox( "LieferPosEdit", True, True, False, False, False, False, "Bestellposition bearbeiten", detail )
--- Ende Code ---
und so wie unten beschrieben werden die Lieferpositionn ermittelt.
ParentUNID + "-" + @Text(Pos)
TMC:
Schau Dir in der Designerhilfe die GetAllDocumentsByKey - Methode der NotesView-Klasse an.
Damit kannst Du alle Doks in eine NotesDocumentCollection setzen, die Deinen Kriterien entsprechen.
NotesDocumentCollection.Count gibt Dir dann die Anzahl wieder.
In Deinem Beispielcode machst Du schon sowas ähnliches:
--- Code: ---Set detail = view2.GetDocumentByKey( thisDoc.UniversalID + "-" + sPos )
--- Ende Code ---
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln