2016-07-11 8 views
0

Ich habe ein Problem mit dem Laden von Dokumenten mit diesem Code.Verwenden von DynamicControl mit Datenquelle in einer externen Datenbank

var c = getComponent("dynp") 
c.show("contact",{action:'editDocument',documentId:unid}) 

Oder eigentlich ist es nur ein lästiges Problem.

Mein var unid verweist auf ein Dokument in einer anderen Datenbank, aber c.show erwartet, dass sich das Dokument in derselben Datenbank wie der DynamicContent-Code befindet. I wird daher ein Fehler rufen jedes Mal, wenn die c.show("contact",{action:'editDocument',documentId:unid})

Der Fehler

dynp Fehler mydynamic.xsp Exception Methode aufgetreten Aufruf NotesDatabase.getDocumentByUNID (java.lang.String)

Die CustomControls-Datenquelle ist

<xp:dominoDocument formName="myForm" var="doc1" databaseName="#{javascript:getExternaldb()}" />

und das Dokument wird daher korrekt geladen. Aber ich bekomme immer noch den nervigen Fehler (Admin ist nicht glücklich)

Gibt es eine Möglichkeit, diesen Fehler zu vermeiden?

Antwort

1

Sie übergeben den Datenbanknamen nicht als Parameter. Ohne ignoreRequestParams bin ich mir ziemlich sicher, dass dies die aktuelle Datenbank übernehmen wird und überschreibt, was immer Sie in die Datenquelle legen.

Funktioniert es, wenn Sie es in den Parametern übergeben?

+0

Ich versuchte mit dem 'ignoreRequestParams =" true/false "' und das Dokument lädt gut. Der Fehler tritt auf, bevor das benutzerdefinierte Steuerelement geöffnet wird. Ich denke, der Befehl d.show verwendet die getDocumentByUNID, bevor es die Datenquelle kennt. Aber wenn ich den Datenbanknamen als Parameter in der 'd.show' übergeben kann, wäre das in Ordnung. Aber ich habe jetzt nicht die Syntax? –

+0

Die Syntax anderer Parameter scheint mit Eigenschaftsnamen übereinzustimmen, also würde ich annehmen, dass 'databaseName =" # {javascript: getExternaldb()} "funktioniert (Sie können SSJS weiterhin in CSJS verwenden, es wird nur vor dem CSJS ausgewertet wobei an den Browser weitergeleitet –

+0

I die korrekte Syntax 'var db gefunden:. Notesdatabase = getExternalDb(); var dbserver = db.getServer() var dbfilepath = @ReplaceSubstring (db.getFilePath()" \\ “, "/"); var dbname = dbserver + "!!" + dbfilepath;. var unid = viewentries.getDocument() getUniversalID(); var d = GetComponent ("dynC"); d.show ("Kontakt", Aktion: 'editDocument', Datenbankname: Datenbankname, DokumentationsID: Unid})}; ' –

0

Ich habe nie versucht zu tun, was Sie tun. Ich verstehe nicht, was du wirklich machst. Ich habe den Action-Teil von c.show nie gesehen. Und nur selten benutze ich getComponent.

Sie haben ein dynamisches Panel und eine funktionierende benutzerdefinierte Kontrolle richtig? Sie versuchen, Bearbeitungsmodus vs Lesemodus zu steuern, richtig? Warum setzen Sie nicht einfach eine viewScoped Variable mit etwas wie editMode = true/false. Und dann lies das benutzerdefinierte Steuerelement das ein, um den Modus zu bestimmen. Keine Notwendigkeit, dass diese Aktion Geschäft ...

+0

Parameter, die in c.show verwendet werden, finden Sie in der Dokumentation zum Öffnen eines Dokuments in einem dynamischen Inhaltssteuerelement in einem Ansichtsfenster. Siehe https://www.ibm.com/support/knowledgecenter/SSVRGU_9.0.1/com.ibm.designer.domino.ui.doc/extlib_controls_dynamic.html – jpishko

+0

Die c.show ("Kontakt", {action: 'editDocument' , documentId: unid}) transformiere in eine URL /myDb.nsf#content=contact&action=editDocument&documentId=002767D4D4DABC5BC1257FE A00420593 und das funktioniert einwandfrei. Es ist kein Problem mit editDocument/OpenDocument. Es ist "nur" das lästige Problem, dass die d.show den Fehler in der log.nsf gibt, wenn das Dokument in einer anderen Datenbank gespeichert ist. Ich kann natürlich nur die URL selbst berechnen, die ich glaube, würde auch gut funktionieren, aber wenn die Show-Funktion verfügbar ist, warum nicht verwenden? –

+0

Warum nicht benutzen? Aus genau dem Grund, aus dem du ein Problem hast. Das eingebaute Zeug ist nicht immer das einfachste, mit dem man arbeiten kann. :) –

Verwandte Themen