Bestem selv DocType på en XPages

Via Xsp Properties kan man nemt sætte en DocType for hele databasen.

en du kan også angive en DocType for den enkelte side:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.properties>
      <xp:parameter name="xsp.html.doctype">
           <xp:this.value><![CDATA[HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"]]></xp:this.value>
      </xp:parameter>
   </xp:this.properties>

</xp:view>

Dette kan være nyttigt hvis du ønsker at vise din XPage i en Microft Web Browser object på en form – denne kræver at DocType er Transitional og uden en DTD for ikke at vise en ramme

Sub Postopen(Source As Notesuidocument)
   Dim browserobject As Variant
   Set browserobject=source.GetObject("Microsoft Web Browser")
   browserobject.Navigate("http://lotusscript.dk")
End Sub

Sub Navigateerror(Source As Webbrowser, Pdisp As Variant, Url As Variant, Frame As Variant, Statuscode As Variant, Cancel As Integer)
    cancel=True
End Sub

Log File Reader 2.0

Så er Log File Reader 2.0 netop frigivet på OpenNTF.og kan downloades her

New features in 2.0

  • Can read any text file on the server
  • Files can be downloaded on the client
  • Better file browser (files are sorted by date)
  • Browse all .jar files in the Ext folder on the server – or download them for closer inspection
  • Improved UI (wider screen, easier scrolling)
  • Custom filters: e.g. highlight error/warning messages or hide the time/dates
  • Better security. The default Log File Reader can be used by Anonymous users – but restricted files can only be viewed by Administrators & Developers specified on the server document in the Domino directory
  • You can customize the Log File Reader by editing the Config.xml file
  • Add more files
  • Use a custom xlst file to transform xml files to more readable html
  • Specify file encoding, e.g. utf-8 to support other languages
  • Define your own filters
Release 2.5 (soon)
  • Can read any nsf file, e.g. the OpenNTF log file or your own custom log file

Download af filer

14523719_sHvis du har genereret en fil, f.eks. en Excel eller PDF fil og ønsker at brugeren kan downloade den fra en XPages, så kan det nemt gøres med denne lille Download class.

Her et simplificeret eksempel, først en lille java bean der kan læse en fil fra disken og downloade den hos brugeren:

import org.apache.commons.io.FileUtils;
import dk.xpages.Download;

class MyBean implements Serializable {
	public void download() {
		byte[] myFile = FileUtils.readFileToByteArray("c:\temp\file.txt");
		Download download = new Download();
		try {
			download.save(getByteArray(), getFilename());
		}
	}
}

På en XPages kan download linket laves således:

<xp:link escape="true" text="Download">
	<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
		<xp:this.action><![CDATA[#{javascript:myBean.download();}]]></xp:this.action>
	</xp:eventHandler>
</xp:link>

Links

Java.policy

21454543_sJava.policy filen på Domino serveren afgøre hvilke rettigheder dine java programmer kører med. Default settings er desværre meget restriktive – og du kan derfor ikke:

  • Libraries som Log4J, JUnit eller Java Logging
  • Lave kode der bruger Reflection til at f.eks. at læse private fields eller bruge dynamic classloading

Der findes et par løsninger:

  • Lav din kode i jar filer og gem det i Ext folderen på serveren. Her får de automatisk full access. Dette er dog for omstændigt at gøre for din egen kode – og kan give problemer hvis du har behov for forskellige version af jar filerne til dine forskellige applikationer.
  • Kør det som en OSGi plugin
  • Ændre i java.policy filen. Absolut anbefalet.
  • Lav simpel kode der ikke benytter de færdige frameworks eller smarte features i Java, f.eks. nogle af Reflection metoderne. Æv – jeg hader begrænsninger!

Du ser allerhelst at din admin tilføjer denne linie til /jvm/lib/security/java.policy filen:

permission java.security.AllPermission;

Ellers må du være mere specifik, f.eks:

permission java.lang.RuntimePermission "setContextClassLoader"; 
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";

Bemærk at filen overskrives ved opgradering af Domino serveren – derfor bør ændringer laves i en ny fil kaldet java.pol (det er specificeret i java.security filen)

Links

Grafer med Dojo

20659789_sMed Dojo kan du nemt laver grafer på din XPage. Dvs. det har dog voldt mig nogle problemer i det mange af de eksempler jeg fandt på nettet ikke umiddelbart virkede i XPages. Så hermed et simpelt lille eksempel med ‘hardcodet’ data som der virker – og nederst et par links til en god Dojo graf guide.

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" dojoParseOnLoad="true" dojoTheme="true">
	<xp:this.resources>
		<xp:dojoModule name="dojox.charting.Chart2D"></xp:dojoModule>
		<xp:dojoModule name="dojox.charting.themes.Claro"></xp:dojoModule>
	</xp:this.resources>
	<h1>Nice graph</h1>
	<xp:scriptBlock>
		<xp:this.value>
		var chartData = [
			{y: 1978, text: "Blue Widget"},
			{y: 1669, text: "Brown Widget"},
			{y: 2017, text: "Green Widget"},
			{y: 1545, text: "Purple Widget"},
			{y: 339, text: "Red Widget"},
			{y: 1067, text:	"Yellow Widget"}
		];
		drawChart = function() {
			var chart = new dojox.charting.Chart2D("#{id:chartNode}");
			chart.setTheme(dojox.charting.themes.Claro);
			chart.addPlot( "default", {
				type: "Pie",
				radius:200,
				fontColor:"black",
				labelOffset: -20
			});
			chart.addSeries("Number of Orders", chartData);
			chart.render();
		};

		XSP.addOnLoad(drawChart);
		</xp:this.value>
	</xp:scriptBlock>
	<div id="chartNode" style="width: 900px; height: 450px; " ></div>
</xp:view>

Links

Test med JUnit

11796400_sJUnit er et genialt Testing framework der understøtter TDD (Test Driven Design). Jeg har desværre ikke kunnet få det til at virke i Domino Designer. Når jeg opretter en ny ‘JUnit Test Case’ fra Package Explorer menuen og efterfølgende kører den med ‘Run As, JUnit Test‘ så får jeg en ‘Class not found ..’ fejl. Æv – det havde ellers være nemt …

I stedet for, så kører jeg nu mine JUnit test fra en XPage – og det virker perfekt:

  • Først kopierer jeg to jar filer ind i ‘Jar’ folderen i min database: junit.jar og hamcrest-core.jar
  • Hvis du få security problemer, så skal der rettes i java.policy filen (typisk: C:\domino\jvm\lib\security\java.policy). Tilføj denne linje:
    grant { permission java.security.AllPermission; };

    Det får du sikkert ikke lov til i produktion – men du tester alligevel kun lokalt eller på en Devleopment server.

  • Til at kører mine test klasser, har jeg lavet min egen ‘Runner’ – dvs. en klasse der kan starte JUnit runneren fra en XPage og efterfølgende præsentere resultatet i html. Koden kan downloades her.
  • Det hele kaldes fra et computet field på en XPages
<xp:text escape="false" id="computedField1">
		<xp:this.value><![CDATA[${javascript:
runner = new dk.xpages.utils.JUnitRunner();
//Run test or TestSuite
runner.runTest( "test.dk.xpages.TestSuite" );
runner.getHtml();
}]]></xp:this.value>
</xp:text>

Links