Ich habe eine Datenbank A in der alle XPages sein sollen und eine Datenbank B in der die Daten liegen und möglichst keine XPages liegen sollen.
Der Anwender soll also Datenbank A im Browser öffnen und wie über ein Portal Daten in der Datenbank B lesen und auch bearbeiten können.
Aktuell arbeite ich mit meinem eigenen User und ich stehe in beiden Datenbanken explizit mit Managerzugriff in der ACL.
Gelöst habe ich es soweit, dass ich eine Redirect Seite habe, die im beforePageLoad die UNID aus der URL in eine RequestScope Variable "docunid" steckt die dann in der Xpage wieder verwendet wird:
<xp:this.data>
<xp:dominoDocument var="document1"
databaseName="Entwicklung\DatenbankB.nsf"
formName="Eingabe" action="editDocument">
<xp:this.documentId><![CDATA[#{javascript:return requestScope.get("docunid");}]]></xp:this.documentId>
</xp:dominoDocument>
</xp:this.data>
So komme ich zumindest schon einmal an das korrekte Dokument heran (mit computed Fields in der Xpage überprüft).
Wenn ich allerdings über folgenden Button, den Bearbeitungsmodus ändere, so verschwindet er zwar, aber ein zweiter Button, bei dem rendered="#{javascript:document1.isEditable()==false;}"
steht taucht nicht auf. Ebenso sind Eingabefelder im Editmode nicht sichtbar.
<xp:button value="In Lesemodus ändern" id="button1"
rendered="#{javascript:document1.isEditable()==true;}"
refreshMode="complete">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action>
<xp:changeDocumentMode mode="toggle"></xp:changeDocumentMode>
</xp:this.action>
</xp:eventHandler>
</xp:button>
Es ist sicherlich nur eine Kleinigkeit, die ich übersehe, aber ich suche sie schon seit Stunden und finde sie einfach nicht.
Wer kann helfen?
Warum nicht Url Parameter verwenden?
... wenn ich die Xpage in Datenbank A einfach nur mit den URL-Parametern öffne
http://Servername/Entwicklung/DatenbankA.nsf/XpageInDatenbankA.xsp?databaseName=CN=Servername!!Entwicklung\DatenbankB.nsf&documentId=<UniversalIDdesDocumentsInDB-B>&action=openDocument
habe ich gar keinen Zugriff auf irgendwelche Felder in dem Dokument.
Deshalb dachte ich, dass es so gar nicht geht und habe einen anderen Weg gesucht.
Genau so würde es aber gehen.
Dann sind wir schon Zwei mit der Meinung ;)
Das CN= muss noch aus dem DB Parameter entfernt werden.
Der komplette Servername steht bei mir im kanonischen Format in der URL, deshalb hatte ich das CN= am Anfang hier im Post vergessen wegzuschneiden.
Aber auch wenn ich den Servernamen in der URL in die korrekte Windows-Schreibweise ändere, zeigt der Browser mir nicht die Daten des Dokuments.
Kann denn das Dokument überhaupt (also direkt) in DB B geöffnet werden? Im Browser, ohne XPage?
Ja, das geht
EDIT:
Liegen die DBs auf dem gleichen Server?
Ja, beide liegen auf dem gleichen Server im Verzeichnis "Entwicklung"
Wenn ich die Xpage in Datenbank A so verändere, dass einfach nur das Dokument in Datenbank B geöffnet wird, bekomme ich einen
Error 404
HTTP Web Server: Ausnahme: Element nicht gefunden
Dies liegt vermutlich daran, dass der Maske in Datenbank B keine Xpage zugeordnet ist, die geöffnet werden soll. Allerdings möchte ich doch die Datenbank B möglichst nicht verändern.
Ich habe folgende XPage in DatenbankA.nsf hardcodiert:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="document1"
databaseName="Entwicklung\DatenbankB.nsf"
formName="Adresse" action="editDocument"
documentId="59B3EF67064218DCC1257B4A0031C1FF">
</xp:dominoDocument>
</xp:this.data>
TEST<xp:br></xp:br>
<xp:inputText id="inputText1" value="#{document1.Vorname}"></xp:inputText>
<br></br>
<xp:text escape="true" id="computedField1" value="#{document1.Nachname}"></xp:text>
</xp:view>
Die Seite geht auf, aber ist bis auf den Text "TEST" leer. ???
Ich hätte allerdings erwartet, dass zumindest ein bearbeitbares Feld mit dem Vornamen und der Nachname aus dem Dokument angezeigt wird.
Langsam glaube ich, dass an meinem Testserver irgendetwas falsch konfiguriert ist.