Webentwicklung: $$Return mit HTTP_Referer

  • Hallo,
    ich entwickle gerade eine kleine Webanwendung unter Domino 7.0.3.
    Aus einer Ansicht heraus erstelle ich ein neues Dokument mit @Compose. In der Eingabemaske habe ich einen Submit - Button und ein Feld $$Return. Die Formel des $$Return - Feldes ist:
    "[" + HTTP_Referer + "]". Ich möchte also, nach dem Senden der Seite, wieder auf die vorhergehende Seite gelangen, das wäre die View, aus welcher ich die Maske aufgerufen habe.
    Das Ganze funktioniert nun leider nur, wenn das $$Return - Feld bearbeitbar und sichtbar ist. Sobald ich das Feld verberge funktioniert es nicht mehr.
    Ich könnte das Feld jetzt sichtbar lassen, das finde ich aber sehr unschön, denn der Nutzer soll davon nichts mitbekommen.


    Hat jemand vielleicht einen Tipp für mich?
    Uwe Hörnig

  • Und was genau heisst es funktioniert nicht mehr ?
    Wird er woanders hingeleitet oder was ?


    Bitte beschreibe doch erst mal genau was passiert und was erwartet wird


    [color=FF0000]Bitte auch aufs Themenpräfix achten[/color]

  • Was wird erwartet:
    Ich möchte nach Betätigen des "Submit" - Buttons wieder auf der Ausgangsseite landen. Die Adresse müsste dazu im Feld $$Return stehen, was die CGI Variable HTTP_Referer bewirkt, welche ich in das Feld hineinrechne.


    Was passiert:
    Wenn ich das Feld $$Return in den Feldeigenschaften verberge, wird man zur gleichen Eingabemaske geleitet.
    Lasse ich das Feld $$Return sichtbar, gelange ich, wie gewollt, auf die Ausgangsseite, in diesem Fall die View aus der heraus ich die Maske zum Erstellen des neuen Dokuments aufgerufen habe.

  • Das Feld HTTP_Referer ist in der Maske als Feld (berechnet beim Anlegen) vorhanden.


    1. Wenn ich ein neues Dokument erstelle, ist das Feld wie folgt belegt:
    HTTP_Referer http://ServerName/datenbankpfad/Ansicht?OpenView


    2. Wenn ich das $$Returnfeld verberge und auf Submit drücke ist HTTP_Referer wie folgt belegt:
    HTTP_Referer http://ServerName/Datenbankpfad/Maske?OpenForm.
    Die URL verweist in diesem Fall genau auf die erneut geöffnete Maske.


    3. Wenn ich das Feld $$REturn nicht verberge steht in HTTP_Referer die URL auf die vorhergehende Seite, also http://ServerName/datenbankpfad/Ansicht?OpenView, wie unter 1..

  • Aus Erfahrung meiner Webentwicklungen funktiert das normalerweise zuverlässig, beide Felder müssen aber "berechnet zur Anzeige" sein, da die Inhalte ansonsten gespeichert werden.
    Das Feld "HTTP_Referer" muss in der Maske oberhalb des Feldes $$Return stehen, da die Auswertung der Formeln in der Reihenfolge der Anordnung in der Maske erfolgt.
    Ich setze das Feld $$Return immer an das Ende Maske und verstecke es mit der Texteigenschaft "Hide" mit dem Häkchen bei Notes und Web. Das hatte bisher immer funktioniert.

  • Vielen Dank für die Hilfe. Leider kann ich keine positive Rückmeldung geben. Schon wenn ich das $$Return - Feld auf "Berechnet zur Anzeige" setze erfolgt keine Weiterleitung auf die vorherige Seite mehr. Ich muss das Feld also nicht einmal verbergen. Ansonsten habe ich alles so konfiguriert, wie mir gerd empfohlen hat.
    Zur Verdeutlichung habe ich einmal ein paar Screenshots angefügt.

  • Natürlich ist das so, denn nach dem Betätigen der Submit Schaltfläche ist ja die letzte URL von der aufgerufen wurde das Dokument selbst.
    Sollte sich durch die Logik von HTTP_Referer ja von selbst erklären.


    Wenn du das so haben willst, dann musst du entweder den HTTP_Referer beim Öffnen woanders oder eben im Dokument fix abspeichern und beim Schliessen wieder löschen.

  • Weil ein bearbeitbares Feld nur einen Vorgabewert bekommt und sobald es diesen bekommen hat sich nicht mehr ändert.
    Ist das Feld jetzt per Hide-When versteckt bekommt es den Vorgabewert erst beim Abspeichern mit dem bekannten Problem.
    Bei einem bearbeitbaren feld funktioniert das aber immer nur beim Erstellen des Dokumentes, danach geht er immer wieder auf die Ansicht zurück über die beim Erstellen das Dokument erzeugt wurde

  • Gut, vielen Dank, da muss ich mir wohl etwas anderes einfallen lassen. Ich habe schon versucht, den HTTP_Referer in einem Feld beim Erstellen des Dokuments über einen WebQueryOpen - Agent abzuspeichern. Leider ist mir bisher auch das nicht gelungen. Das Feld ist nach dem Submit immer leer.


    Sub Initialize
    Set session = New NotesSession
    Set db = session.CurrentDatabase
    Set note = session.DocumentContext

    Call note.ReplaceItemValue("referer", note.GetItemValue("HTTP_Referer")(0))
    Call note.Save(False, True)

    End Sub

  • tut mir leid, folgendes hatte ich übersehen:
    das Feld HTTP_Referer wird natürlich beim Speichern neu berechnet und dann erst an das Feld $$Return übergeben.


    Mit folgender Formel im Feld $$Return müßte es aber funktionieren:
    @If(@IsDocBeingLoaded;"["+HTTP_Referer+"]";@ThisValue)

  • Leider funktioniert die beschribene Lösung nur wenn bestehendes Dokumente bearbeitet wird, nicht wenn mittels @command([compose]...) ein neues Dokument erzeugt wird.


    folgende Erweiterung habe ich getestet und hat funktioniert:
    ein zusätzliches bearbeitbares Feld (z.Bsp.) "tmphttpref"
    mit dem HTTML-Attribut 'type="hidden" ' und dem Häkchen bei verstecken bei "Geöffnet zum Lesen"
    in Vorgabewert: HTTP_Referer einsetzen
    Ein Script-Agent in den WebquerySave:
    [...]
    temp:=context.getItemValue("tmphttpref")(0)
    call context.removeitem("tmphttpref")
    if context.isnewnote then
    print "["+temp+"]"
    end if

  • Das funktioniert aber nur so lange wie das Dokument immer zum Bearbeiten geöffnet wird und beim Verlassen des Dokumentes immer gespeichert wird.
    Sobald der User einfach mal den Browser schliesst hat der nächste User wieder das Problem, daß er auf dieAnsicht zurückgeht, die der User davor als Ausgangspunkt hatte