Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung - XPages => Thema gestartet von: Rainer Merlin am 17.05.13 - 13:12:26

Titel: Öffnen einer klassischen Seite aus XPage in einem neuen Tab
Beitrag von: Rainer Merlin am 17.05.13 - 13:12:26
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
Titel: Re: Öffnen einer klassischen Seite aus XPage in einem neuen Tab
Beitrag von: Sven Hasselbach am 23.05.13 - 16:37:31
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>

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.
Titel: Re: Öffnen einer klassischen Seite aus XPage in einem neuen Tab
Beitrag von: Tode am 25.05.13 - 05:05:16
Wie wärs mit notes://db.nsf/Maskenname?openform

Dann ersparst Du Dir das erstellen es Dokuments und die übergabe der unid...