Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: lotusnotus am 13.05.13 - 15:29:27
-
Hallo zusammen,
ich als totaler LN Neuling stehe vor folgendem Problem:
Ich habe in ein bestehendes Haupt-Dokument, in dem Prsonen gepflegt werden, ein Sub-Dokument einfegügt.
In diesem wird ein Webbrowser-Element geladen und eine Peport-Webseite aufgerufen.
Hierzu wird dem HTTP-String noch die Personalnummer aus dem Hauptdokument mitgegeben.
Exemplarisch: http://mein-report.aspx&personalnummer=123
Das klappt alles wunderbar.
Das Problem ist nun, dass der Inhalt des Webbrowsers/der Subform sich ja nun
bei jedem Auffruf einer Person ändert und dynamisch darstellt.
Auch ohne eine Änderung in dem Hauptdokument, erscheint nun die Frage ob dieses gespeichert werden soll.
Wie kann ich nun erreichen, dass das Subdokument erst gar nicht gespeichert wird, bzw. eine Änderung einfach verworfen wird?
Unabhängig davon mussen im Hauptdokument ja noch Änderungen möglich sein.
Vielen Dank vorab!
-
Willkommen im Forum.
Zuallererst: Es gibt keine Subdokumente in Notes.
Zum grundsätzlichen Verständnis in aller Kürze: Notes hat Dokumente, diese Dokumente sind Sammlungen von Daten, die in Items abgelegt werden. Ein Dokument kann beliebig viele Items haben, es kann auch Items haben, die andere Dokumente nicht haben, auch wenn diese Dokumente scheinbar eine gleiche Struktur haben (vergiss alles, was Du mit SQL-Datenbanken gelernt hast, Notes tickt da ganz anders).
Weiterhin gibt es Gestaltungselemente, mit denen das Aussehen und Verhalten von Notesdatenbanken beschrieben wird. Eines dieser Gestaltungselemente ist eine Maske (Form). Eine Maske beschreibt, wie ein o.g. Dokument angezeigt wird, welche Aktionen ablaufen, wenn das Dokument geöffnet, gespeichert, refresht usw. wird. Zum Erstellen von Dokumenten verwendet man meistens auch Masken, das ist aber nicht zwingend notwendig.
Um Masken modularisiert gestalten zu können, gibt es auch ein Gestaltungselement Teilmaske (Subform). Diese Teilmasken werden in Masken eingefügt. Ein Dokument, das mit einer Maske geöffnet wird, das eine Teilmaske besitzt, erfährt alle Beschreibungen, die sowohl in der Maske als auch in der Teilmaske beschrieben sind. Teilmasken können, wie Masken, Felder besitzen, deren Inhalt dann zu Items in Dokumenten werden, aber auch alle Events, die beim Öffnen, Speichern usw. ablaufen.
Wenn Du nun solch eine Teilmaske in Deiner Maske eingebaut hast, bedeutet das nicht, dass Du nun ein Dokument und ein Teildokument hast - was auch immer das sein sollte. Maske und Teilmaske wirken auf das Dokument in gleicher Weise ein. Ändert sich im geöffneten Zustand der Inhalt eines der Felder -egal, ob in der Maske oder der Teilmaske - wird der Benutzer beim Schließen des Dokumentes gefragt, ob die Änderungen gespeichert werden sollen. Gespeichert werden die Änderungen in das darunterliegende Dokument.
Ich kann nicht wirklich nachvollziehen, was Du dort tatsächlich gebaut hast. Mit Hilfe der Teilmaske werden aber sicherlich Felder/Items gefüllt (unabhängig davon, ob sich diese Felder in der Maske oder der Teilmaske befinden). Wenn diese Informationen nicht im Dokument gespeichert werden sollen, genügt es evtl. schon, die Felder umzustellen auf "berechnet zur Anzeige", denn die Inhalte dieser Felder werden dann nicht im Dokument gespeichert. Aber auch das ist nicht eine besondere Eigenschaft, die mit Teilmasken zu tun hat.
-
Hallo und vielen Dank für die ausführliche Antwort!
Um klar zu machen worum es geht:
Es gibt ein Dokument in dem alle Mitarbeiter-Stammdaten inklusive Personalnummer gepflegt werden.
Dieser Maske haben wir nun eine Teilmaske hinzugefügt.
In diese wurde ein "Mircosoft Webbrowers Control" als Applet eingefügt.
Bei Aufruf eines Mitarbeiter-Datensatzes, wird dem Applet der HTTP-String zu einem SQL-Web-Report mitgegeben der dynamisch über die Personalnummer als Variable weitere MA-Daten darstellt, die nicht in Notes geflegt werden (z.B. Daten aus dem Active Directory).
Leider finden wir bei dem besagten Applet keine Option "berechnet zur Ansicht" o.ä.
Somit ist jedes Laden des Applets eine Veränderung des Dokuments.
-
Applet ist nicht wirklich meine Domäne ...
Das Applet selbst ändert sich doch nicht, das ist doch nur ein Stückchen Java. Was ändert sich denn im Dokument und wo wird das abgelegt?
Wie wird der HTTP-String übergeben? In einem Feld? Ist das Feld berechnet zur Anzeige?
Ist die Darstellung des Ergebnisses innerhalb des Applets oder schreibt das Applet Daten in Felder der (Teil-)Maske?
-
Vielleicht hilft ja hier das Feld "SaveOptions", damit das Dok nicht gespeichert wird.
-
Folgendes ist im Bereich Postopen des Dokumentes hinterlegt:
'Anzeigen der Webseite Assets
Dim w As New notesuiworkspace
Dim browserobject As Variant
Set uidoc=w.currentdocument
Set browserobject=uidoc.GetObject("Microsoft Web Browser")
Dim URL As String
Dim pnumber As String
pnumber = Right(uidoc.Document.persno(0),5)
zeit = Second(Time)
URL="http://myserver/ReportServer?%2freports%2ftools%2fasset_tool%2fulc_assets&rs:Command=Render&rc:Toolbar=false&user_id=" + pnumber + "&rand=" + zeit
If URL <> "" Then
browserobject.Navigate(URL)
End If
End Sub
-
Vielleicht hilft ja hier das Feld "SaveOptions", damit das Dok nicht gespeichert wird.
Vermutlich nein, denn der Rest des Dokumentes muss ja weiterhin speicherbar bleiben. Soweit ich das verstanden habe, gilt "save options" ja für das komplette Dokument.
-
Man kann nicht nur Teile eines Dokumentes speichern (jedenfalls kenne ich da nichts).
-
Das Applet wird also im PostOpen angefasst, ohne dass das Dokument geändert wird. Kann es sein, dass sich irgendetwas anderes im geöffneten Dokument ändert, also nicht das Applet zur Änderung führt?
Das Dokument wird ja anscheinend im Bearbeitenmodus geöffnet. Funktioniert das Applet auch im Lesemodus?
Kannst Du temporär die Teilmaske entfernen (ich gehe davon aus, dass sich das PostOpen-Script in der Teilmaske befindet)? Was passiert dann beim Schließen des zum Bearbeiten geöffneten Dokuments? Erfolgt dann auch die Abfrage nach der Speicherung?