2012-04-01 17 views
2

Ich versuche diesen Code für eine Listbox auszuführen, aber es funktioniert nicht, das gibt mir den Fehler 500. Wenn ich die @Formula direkt in Listbox schreibe, funktioniert es gut.@dbcolumn in session.evaluate in xpages

return session.evaluate("@DbColumn(@DbName(), \"viewName\", 1)").elementAt(0) 

aber wenn ich unter Code schreiben, funktioniert es gut.

return session.evaluate("@Unique").elementAt(0); 

ich in xpages auf Lotus Notes arbeite 8.5.3

Antwort

4

Sie erhalten einen 500er Fehler, weil die @DbColumn für SSJS ein Parameter kleiner als das "Original" @ DbColumn-Version hat, die ausgeführt wird, wenn Sie die evaluate-Methode verwenden. Bei XPages ging die Option für das Caching und die Klasse verloren.

Dies ist die Syntax für die Anweisung bewerten:

@DbColumn(class : cache ; server : database ; view ; columnNumber) 

Dies ist die XPages-Syntax:

@DbColumn(server : database , view , columnNumber); 

Und Sie die native [email protected] Syntax verwenden müssen, F. E. verwende Semikolons anstelle von Kommas.

+0

Danke..aber wie kann ich diese @dbcolumn dann ausführen, dass ich im Textformat habe? – NotesArt

+0

Ich weiß nicht, ob ich Sie richtig verstehe, aber wenn ja, könnten Sie es so machen: session.evaluate ("@ DbColumn (\"; @DbName(); \ "viewName \"; 1) ") .elementAt (0) –

0

session.evaluate funktioniert mit der ursprünglichen @Formula-Syntax, nicht mit SSJS eins.

Verwenden Sie stattdessen @DbColumn (""; @DbName; "view", Spalte). Hier

+0

Trivia: Wenn es SSJS-Syntax war, würde Ihr zweites Beispiel - @Unique auch nicht funktionieren - korrekte SSJS-Syntax ist @Unique() –

0

ist die Lösung: In SSJS Sie die folgenden direkt codieren können ...

@DbColumn(@DbName(),"viewName",1) 

Wenn Sie das gleiche mit dem session.Evaluate() tun wollen, dann können Sie versuchen, die Folgendes.

//@DbColumn(@DbName(),"viewName",1) --> in SSJS 
//@DbColumn(class : cache ; server : database ; view ; columnNumber) --> in Formula using Evaluate 

var colValues = "@DbColumn(\"\":\"\";" + @DbName() + ";\"viewName\";1)"; 

print ("colValues[0]" + colValues[0]); // will print @DbColumn("":""; ServerName ; viewName; 1) 
print ("colValues[1]" + colValues[1]); // will print @DbColumn("":""; DatabaseName; viewName; 1) 

return session.evaluate(colValues[1]) // It will return the expected value in listbox 

Da @DbName() gibt sowohl den Servernamen und den Namen der Datenbank. Wir brauchen nur den Namen der Datenbank. Dies ist nur für den aktuellen Server. Für verschiedene Server müssen wir den Servernamen angeben. Ich hoffe, das wird helfen ... !!!