Exempelkod, sessionskontroll

När ett GET-anrop skickas, vilket normalt sett är så man kommer till applikationen första gången så sätts en parameter i sessionen. Varje gång det sedan blir en POST så kontrolleras denna. Denna metod fungerar normalt sett, men vid vissa typer av integrationer där tex boendekalkylen startas upp med ett POST-anrop så kommer koden inte att fungera och då kan man inte aktivera denna funktion.

Implementerar ni en egen funktion så är det alltid bra att kontrollera även boendekalkylens egna session förutom det ni själva önskar att kontrollera. Hur denna kod bör fungera påverkas av hur boendekalkylen är integrerad med andra system, nedanstående exempel bör bara ses som ett exempel på hur man kan läsa och sätta sessionsvariabler.

public class KontrolleraBkSession implements capitex.integration.ISessionskontroll {
   public void KontrolleraSession(IKontext kontext) throws SessionSaknas {
        IGetRequestMethod rm=(IGetRequestMethod)kontext.getService(IGetRequestMethod.class);
        IAdvancedSessionAccess as=(IAdvancedSessionAccess)kontext.getService(IAdvancedSessionAccess.class);
        String m=rm.GetMethod();
        if(m.equals("GET")) {
            as.setSessionVar("KontrolleraBkSession_Initiated", "1");
        }
        else if(m.equals("POST")) {
            String minit=(String)as.getSessionVar("KontrolleraBkSession_Initiated");
            if(minit==null || !minit.equals("1")) {
                throw new SessionSaknas("Sessionen mot boendekalkylen har avslutats på servern,\r\ntroligtvis på grund av att du varit inaktiv för lång tid.\r\nUppgifter som matats in sedan du sparade sist har tyvärr gått förlorade!");
            }
        } else {
            throw new java.lang.UnsupportedOperationException("Requestmetod '"+m+"' ej supportad av klassen KontrolleraBkSession!");
        }        
    }
}