Hallo,
ich habe mit XPages eine Cognos Schnittstelle erstellt die auch schon ganz gut funktioniert.
Da meine Erfahrung mit Domino im Allgemeinen und XPages im Speziellen recht bescheiden ist habe ich dazu 2 Fragen:
Kann man die Schleifen mit denen die XML Tags erstellt werden performanter gestalten bzw. gibt es eine einfachere Variante eine Ansicht als XML auszugeben?
Gibt es eine einfache Möglichkeit per SSJS herauszufinden ob eine Spalte einer Ansicht eine Zahl bzw. ein Datum beinhaltet? Im Moment übergebe ich alles als String. (im Metadata Bereich) Es gibt zwar in den Eigenschaften der Spalte das Feld "Stil", aber ich weiß nicht wie ich darauf zugreifen kann.
var exCon = facesContext.getExternalContext();
var writer = facesContext.getResponseWriter();
var response = exCon.getResponse();
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+
"<dataset xmlns=\"http://developer.cognos.com/schemas/xmldata/1/\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\">\n"+
"<metadata>\n");
for (var i=1;i<=c_view.getColumnCount();i++){ // alle Spalten ermitteln und den Title als item name uebergeben
writer.write("\t<item name=\""+c_view.getColumn(i).getTitle()+"\" type=\"xs:string\"/>\n");
}
writer.write("</metadata>\n<data>\n");
var ae=c_view.getAllEntries() // alle Zeilen der Ansicht
for (var i=1;i<=c_view.getEntryCount();i++){
writer.write("\t<row>\n");
var fee=ae.getNthEntry(i).getColumnValues().elements();
while(fee.hasMoreElements()){ // alle Werte der Zeile
writer.write("\t\t<value>"+fee.nextElement().toString().replace("&","&").replace("<","<").replace(">",">").replace("'","'").replace("\"",""")+"</value>\n")
}
writer.write("\t</row>\n")
}
writer.write("</data>\n</dataset>");
writer.endDocument();
facesContext.responseComplete();
Ich habe diesen Code unter "afterRenderResponse" kopiert und "rendered" auf "false" gesetzt.
Als c_view kann man eine beliebige Ansicht definieren. Diese Ansicht steht dann in Cognos für Reports zur Verfügung.