Willkommen
Gast
. Bitte
einloggen
oder
registrieren
.
22.05.12 - 12:53:35
News:
Schnellsuche:
Das Notes Forum
Domino 5 und frühere Versionen
Entwicklung
(Moderatoren:
Axel
,
Don Pasquale
,
eknori
,
Hoshee
,
ata
,
Thomas Schulte
,
koehlerbv
)
Index einer View
« vorheriges
nächstes »
Seiten:
[
1
]
2
Autor
Thema: Index einer View (Gelesen 1273 mal)
7Stein
Gast
Index einer View
«
am:
10.08.04 - 17:28:53 »
Hallo zusammen,
ich bin noch relativ neu in der Programmierung mit Notes.
Ich habe bisher in delphi auf einer oracle Datenbank programmiert.
Gibt es in Notes die Möglichkeit, den Datensatzzeiger einer View auszulesen?
Hintergrund:
Ich habe ein Formular mit einer Subform, in der Positionen eines Lieferscheines angezeigt werden.
Wenn ich einen Doppelklick auf den Datensatz mache, geht ein neues Formular zum Ändern der Daten auf.
Wenn ich den Datensatz aber nur markiere und über die Action D"Datensatz Ändern" gehe, geht zuerst ein Dialog auf, über den ich den Datensatz auswählen muss.
Code:
Sub Click(Source As Button)
Dim detail as NotesDocument
Dim view as NotesView
Dim view2 as NotesView
Dim sPos as String
Set view = db.GetView("(Lieferposition)")
Set view2 = db.GetView("(BestellPositionenByKey)")
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)
If OK then
Call detail.Save(True, True)
Call view.Refresh()
Call uiDoc.Refresh()
End if
End if
End sub
Vielleicht kann mir einer helfen.
Wenn ich auf das Ereignis Queryopendocument zugreifen will, welches bei einem Doppelklick ausgelöst wird, funktioniert das nicht.
Gruß 7Stein
Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 3660
meden agan
Re:Index einer View
«
Antworten #1 am:
10.08.04 - 18:27:46 »
Wenn ich das richtig verstehe hast Du eine eingebettete View in einer Maske ?
Was genau willst Du nun machen?
Eine saubere Möglichkeit, um per Buttonklick auf das in der embedded View markierten Dokument Zugriff zu erhalten (z.B. die UNID) ist mir nicht bekannt in R5.
Es gibt aber Workarounds:
http://www.atnotes.de/index.php?board=7;action=display;threadid=6473
Gespeichert
Matthias
—
A good programmer is someone who looks both ways before crossing a one-way street.
7Stein
Gast
Re:Index einer View
«
Antworten #2 am:
10.08.04 - 21:47:10 »
Ja genau das ist mein Problem.
Aber warum geht das dann mit einem Doppelklick auf den Datensatz?
Kann ich nicht die Funktiion Queryopendocument aufrufen?
Das verstehe ich noch nicht so richtig.
Gruß 7Stein
Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 3660
meden agan
Re:Index einer View
«
Antworten #3 am:
10.08.04 - 22:07:57 »
Da Du wohl von der relationalen DB - Seite kommst, kann vielleicht der Link für Dich interessant sein:
http://www.nsftools.com/misc/WhatIsNotes.htm
Da wird ein wenig auch die Logik und der Aufbau von Notes erklärt.
Was da aber nicht erklärt wird, ist die Problematik mit embedded Views.
Gerade in R5 sind diese nicht sehr toll (programmatisch) zu bedienen. Ich vermeide die eigentlich auch immer soweit möglich.
Wäre es eine normale View, kommst Du einfach an das gerade ausgewählte Dokument (z.B. via DocumentContext Property der NotesSession-Klasse, also z.B. "Set doc = session.DocumentContext"). Oder alternativ über die UnprocessedDocuments Property der NotesDatabase - Klasse.
Was willst Du denn in dem Queryopendocument-Event machen?
Gespeichert
Matthias
—
A good programmer is someone who looks both ways before crossing a one-way street.
7Stein
Gast
Re:Index einer View
«
Antworten #4 am:
11.08.04 - 18:38:45 »
Im Queryopendocument kann ich direkt auf den mit Doppelklick angewählten Datensatz zugreifen, und das würde ich gerne auch über die Click Routine hinbekommen.
Code:
Sub Queryopendocument(Source As Notesuiview, Contnue As Variant)
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim view As NotesView
Set uidoc = ws.CurrentDocument
Set collection As Source.Documents
Set doc = collection.GetFirstDocument()
Set view = Source.View
If uidoc.EditMode Then
Ok = ws.DialogBox("LieferPosEdit", True, True, False, False, False, False, "Artikelposition bearbeiten", doc)
If OK then
Call doc.Save(True, True)
Call view.Refresh()
End if
End if
Continue = false
End Sub
Diese Funktion würde ich halt gerne für die embedded view aus der Hauptmaske aufrufen.
Aber das funktioniert irgendwie nicht.
Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 3660
meden agan
Re:Index einer View
«
Antworten #5 am:
11.08.04 - 19:03:00 »
Ah, ok.
Problem ist eben, dass der Button (die Click-Routine) in der Maske das aktuell ausgewählte Dokument der embedded View nicht kennt. Wie oben schon geschrieben ist das ein Problem von embedded Views in R5.
Wäre der Button in einer normalen View, dann würde es wunderbar gehen.
Eine View dient übrigens lediglich dazu, Dokumente (also eine Art "Datensätze") anzuzeigen. Auf View-Events reagieren auch nur auf UI - Dinge (z.B. User öffnet Dokument, etc.) - anderweitig kannst Du den Code nicht ausführen.
Natürlich kannst Du Code auch zentral ablegen (z.B. in ScriptLibraries) und dann in den Events via Call Routine() den Code aufrufen.
Hilft aber alles nichts, weil es sich hier ja um eine eingebette View handelt - und Du eben keinen programmatischen Zugriff auf das gerade gewählte Dok hast.
Gespeichert
Matthias
—
A good programmer is someone who looks both ways before crossing a one-way street.
7Stein
Gast
Re:Index einer View
«
Antworten #6 am:
11.08.04 - 21:05:40 »
Dann kann ich also nur hingehen und in einer Inputbox den Datensatz abfragen, der geändert werden soll und dann auf das Element zugreifen?
?
Aber das ist doch bei nur einem Datensatz in der embedded view eigentlich völliger Blödsinn oder?
?
Was dein Kollege oben beschrieben hat habe ich nicht so ganz verstanden und den link kann ich im Büro nicht ausführen wegen irgendwelcher Zertifikate.
Gespeichert
7Stein
Gast
Re:Index einer View
«
Antworten #7 am:
11.08.04 - 21:07:27 »
T'schuldige, der Kollege warst du selber
Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 3660
meden agan
Re:Index einer View
«
Antworten #8 am:
11.08.04 - 21:23:15 »
Zitat von: 7Stein am 11.08.04 - 21:05:40
Dann kann ich also nur hingehen und in einer Inputbox den Datensatz abfragen, der geändert werden soll und dann auf das Element zugreifen?
?
Aber das ist doch bei nur einem Datensatz in der embedded view eigentlich völliger Blödsinn oder?
?
Du kannst ja vorher abfragen, wieviel Doks sich in der View befinden.
Wenn > 1, dann lässt Du die View zur Auswahl in einer Auswahlbox anzeigen, wenn = 1, dann nimmst Du das Doc, wenn < 1, dann Abbruch.
Gespeichert
Matthias
—
A good programmer is someone who looks both ways before crossing a one-way street.
7Stein
Gast
Re:Index einer View
«
Antworten #9 am:
11.08.04 - 22:28:31 »
Ja und wie frage ich das ab?
??
Ich denke ich habe von der Maske aus keinen ZUgriff auf die embedded view.
Dann kann ich doch auch die Dokumente ( sind ja keine Datensätze oder?) nicht zählen oder?
??
Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 3660
meden agan
Re:Index einer View
«
Antworten #10 am:
11.08.04 - 22:42:19 »
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
Gespeichert
Matthias
—
A good programmer is someone who looks both ways before crossing a one-way street.
7Stein
Gast
Re:Index einer View
«
Antworten #11 am:
12.08.04 - 15:29:43 »
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
Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 3660
meden agan
Re:Index einer View
«
Antworten #12 am:
12.08.04 - 15:56:18 »
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
«
Letzte Änderung: 12.08.04 - 15:57:25 von TMC
»
Gespeichert
Matthias
—
A good programmer is someone who looks both ways before crossing a one-way street.
7Stein
Gast
Re:Index einer View
«
Antworten #13 am:
13.08.04 - 10:57:50 »
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 )
und so wie unten beschrieben werden die Lieferpositionn ermittelt.
ParentUNID + "-" + @Text(Pos)
Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 3660
meden agan
Re:Index einer View
«
Antworten #14 am:
13.08.04 - 13:39:44 »
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 )
Gespeichert
Matthias
—
A good programmer is someone who looks both ways before crossing a one-way street.
7Stein
Gast
Re:Index einer View
«
Antworten #15 am:
13.08.04 - 14:07:53 »
Aber die Variable sPOs habe ich ja erst nach der Abfrage "Welches Dokument ich ändern will".
Dann frage ich das doch immer noch ab auch wenn nur ein Dokument in der embedded view vorhanden ist.
Und das möchte ich ja gerne ausschalten, weil es nervig ist, bei nur einer Bestellposition noch gefragt zu werden, welche Position der Bestellung ich denn nun bearbeiten will.
das ist ja fast wie Windowsprogrammierung, wenn man dreimal gefragt wird ob man ein Dokument nun wirklich löschen will oder vielleicht lieber doch nicht.
Wenn ich die Dokumente doch zählen kann, auch wenn sie embedded sind, wieso kann ich dann nicht feststellen welches angewählt ist, also welches einen Rahmen( wird doch bei der Selektion angezeigt) hat oder so?
Gespeichert
7Stein
Gast
Re:Index einer View
«
Antworten #16 am:
16.08.04 - 08:31:27 »
Also ich habe hier im Forum gelesen, dass man dem angeklilckten Datensatz einer embedded view einen Rahmen geben kann.
Aber wie das funktioniert stand da leider nicht zu lesen.
Kann mir jemand erklären wie das funktioniert bitte.
Denn in meinem Buch "Anwendungsentwicklung unter Lotus Notes/Domino5
von Matthias Knäpper finde ich dazu keine Erklärung.
Danke nochmal für die Hilfe
Gespeichert
Spalter
Aktives Mitglied
Offline
Beiträge: 109
Mit der Lizenz zum Löschen!!!
Re:Index einer View
«
Antworten #17 am:
16.08.04 - 10:31:43 »
Hallo 7Stein,
wenn Du ein gutes Buch suchst, ist Raimunds Buch immer die erste Wahl
Mann , Raimund
Domino Designer R5
Gruß
Spalter
Gespeichert
7Stein
Gast
Re:Index einer View
«
Antworten #18 am:
16.08.04 - 10:36:44 »
Ja danke, aber ich brauche auch noch HIlfe bei dem oben beschriebenen Problem
Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 3660
meden agan
Re:Index einer View
«
Antworten #19 am:
16.08.04 - 12:03:21 »
Zitat von: 7Stein am 13.08.04 - 14:07:53
Aber die Variable sPOs habe ich ja erst nach der Abfrage "Welches Dokument ich ändern will". Dann frage ich das doch immer noch ab auch wenn nur ein Dokument in der embedded view vorhanden ist.
Diese Variable vielleicht. Aber nach irgendeinem Kriterium werden ausgewählte Dokumente in Deiner embedded View angezeigt. Und eben nach diesem Kriterium kannst Du Dir z.B. via GetAllDocumentsByKey die Dokumente geben lassen.
Zitat von: 7Stein am 13.08.04 - 14:07:53
Wenn ich die Dokumente doch zählen kann, auch wenn sie embedded sind, wieso kann ich dann nicht feststellen welches angewählt ist, also welches einen Rahmen( wird doch bei der Selektion angezeigt) hat oder so?
Das eine ist Backend (collection.count, etc.), das andere Frontend/UI (ausgewähltes Dok in der embedded View). Aber das Thema "auf ausgewähltes Dok in der embedded View programmatisch zugreifen" ist eben in R5 nicht wirklich unterstützt. Habe ich denke ich aber oben schon erklärt.
Oben hatte ich bereits einen Link gepostet, wo auch eine Beispiel-DB ist. Aber das ist ein unsauberer / unschöner und wackeliger Weg, den ich vermeiden würde.
Gespeichert
Matthias
—
A good programmer is someone who looks both ways before crossing a one-way street.
Seiten:
[
1
]
2
« vorheriges
nächstes »
Gehe zu:
Bitte wählen Sie ein Ziel:
-----------------------------
ATNOTES TEAM
-----------------------------
=> Neuigkeiten - Wichtiges
===> Archiv
-----------------------------
Lotus Notes / Domino 8
-----------------------------
=> ND8: Administration & Userprobleme
=> ND8: Entwicklung
=> ND8: Entwicklung - XPages
-----------------------------
Lotus Notes / Domino 7
-----------------------------
=> ND7: Administration & Userprobleme
=> ND7: Entwicklung
-----------------------------
Lotus Notes / Domino 6
-----------------------------
=> ND6: Administration & Userprobleme
=> ND6: Entwicklung
-----------------------------
Domino 5 und frühere Versionen
-----------------------------
=> Administration & Userprobleme
=> Entwicklung
-----------------------------
Lotus Notes / Domino Sonstiges
-----------------------------
=> Tipps und Tricks
=> Tools & Downloads
=> Projekt Bereich
===> Help-Desk Applikation !!Help!!
=> Java und .NET mit Notes/Domino
=> Companion Products
=> OLE/COM-Programmierung
=> Aus- und Weiterbildung
-----------------------------
Best Practices
-----------------------------
=> At Notes Best Practices
=> Diskussionen zu Best Practices
-----------------------------
Sonstiges
-----------------------------
=> Offtopic
=> Kritik & Vorschläge
=> Infrastruktur
=> Job Suche/Angebote
1 Stunde
1 Tag
1 Woche
1 Monat
Immer
Einloggen mit Benutzername, Passwort und Sitzungslänge
Powered by SMF 1.1.16
|
SMF © 2006, Simple Machines
Impressum Atnotes.de -
Powered by Syslords Solutions -
Datenschutz
| Partner:
Tinte / Toner günstig