Domino 9 und frühere Versionen > ND8: Entwicklung - XPages
Öffnen einer klassischen Seite aus XPage in einem neuen Tab
(1/1)
Rainer Merlin:
Hallo,
mein Pfingstwochenende ist in Gefahr!
Seit Tagen versuche ich eine eigentlich einfache Anforderung umzusetzen, und schaff' es nicht:
Die Anforderung:
In XPiNC soll bei Klick auf einen Button/Link einer XPage "XPage_A" ein klassisches Dokument "Dokument_B" in einer klassischen Notes-Anwendung "Anwendung_B" erzeugt werden.
Dieses Dokument_B muss sich in einem neuen Tab neben XPage_A öffnen.
Meine bisherigen Lösungsversuche:
1.)
Als value des Links in der XPage_A rufe ich eine Java-Klasse auf, die in Anwendung_B das Dokument Dokument_B erstellt und die UNID zuückliefert. Mit dieser UNID baue ich eine URL ala "notes://..." auf.
Problem:
Bei jedem Aufbau von XPage_A wird in Anwendun_B ein Dokument_B erstellt.
2.)
Über das onClick-Event des Links wird eine Java-Klasse angesprochen, die Dokument_B erstellt und über FacesContext.getCurrentInstance().getExternalContext().redirect("notes://...") dieses aufruft.
Problem:
Dokument_B erschient in neuem Tab. Aber: Der Tab, der ursprünglich XPage_A beinhaltete, ist leer.
3.)
Der Link in XPage_A ruft einen XAgent auf (value="notes://.../XAgent.xsp?OpenXpage"), der in Anwendung_B das Dokument_B erzeugt und über FacesContext.getCurrentInstance().getExternalContext().redirect("notes://...") Dokument_B aufruft.
Problem: Nun habe ich 3 Tabs: XPage_A, XPage des XAgent, Dokument_B
4.)
Ich öffne über den Link in XPage_A eine neue XPage, in deren Header ich über <meta http-equiv="refresh" content="1; URL=notes://.../"> auf Dokument_B weiterleite.
Problem: Auch hier erscheinen 3 Tabs: Diesmal XPage_A, XPage mit meta-Tag, Dokument_B
Was soll ich tun?
Besten Dank für jede Hilfe
Rainer
Sven Hasselbach:
Probiers doch mal mit einem CSJS Scriptblock, der das neue Dokument öffnet:
--- Code: ---<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core">
<xp:button
value="OpenDoc"
id="buttonOpenDoc">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="refreshMe">
<xp:this.action>
<![CDATA[#{javascript:
var doc:NotesDocument = database.createDocument();
doc.replaceItemValue("Form", "Test");
doc.save()
requestScope.put("OpenDoc", true);
requestScope.put("DocUNID", doc.getUniversalID() );
}]]>
</xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:div
id="refreshMe">
<xp:scriptBlock
id="scriptBlockOpenDoc">
<xp:this.value>
<![CDATA[
var url = "notes:///Pfad/zur/DB.nsf/0/";
url += "#{javascript:requestScope.get('DocUNID')}?OpenDocument";
window.open(url);
]]>
</xp:this.value>
<xp:this.rendered><![CDATA[#{javascript:requestScope.containsKey("OpenDoc")}]]></xp:this.rendered>
</xp:scriptBlock>
</xp:div>
</xp:view>
--- Ende Code ---
Beim Klick auf den Button wird ein neues Dokument erstellt, und die DocUNID im requestScope abgelegt.
Durch den Refresh wird der Scriptblock an den Client gesendet und das CSJS öffnet dann das gewünschte Dokument.
Tode:
Wie wärs mit notes://db.nsf/Maskenname?openform
Dann ersparst Du Dir das erstellen es Dokuments und die übergabe der unid...
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln