I capitex.integration.IKontext finns en funktion med namnet getService. Denna funktion ger ett plugin tillgång till olika funktioner i den anropande applikationen som i detta fall är boendekalkylen.

Som inparameter till funktionen getService anger man det interface man önskar få tillbaka en implementation för, i varje gränssnitt finns en funktion. För boendekalkylen återfinns dessa tjänstegränssnitt i jar-filen boendekalkyl.integration.services.jar. Det finns också mer generella service-funktioner som återfinns i capitex.integration.jar för att tex komma åt mer avancerade funktioner som har med tex sessioner mm att göra. Dessa gränssnitt kommer aldrig att ändras, helt nya gränssnitt kan dock införas.  

Ett plugin som använder funktioner i boendekalkyl.integration.services.jar behöver ha referenser till boendekalkyl.integration.services.jar och capitex.integration.jar. boendekalkyl.integration.services.jar och capitex.integration.jar kopieras från EAR-paketeringen och installeras i classpath tillsammans med plugin-jar'en. Vid installation av nya uppdateringar av boendekalklyen så ska de nya versionerna av boendekalkyl.integration.services.jar och capitex.integration.jar plockas ut från EAR'en och ersätta de som tidigare användes av plugin'et (detta kräver ingen omkompilering av plugin).

Följande gränssnitt finns för boendekalkylen:

boendekalkyl.integration.services.IHaemtaIndata
public java.io.InputStream HaemtaIndata() throws Exception;

Funktionen hämtar den indata som för tillfället finns i boendekalkylens användargränssnitt. Den InputStream som returneras har teckenkodningen UTF-8 och innehåller ett XML-fragment av typen clsIn (rot-elementet har namnet xml-fragment). XSD för denna XML kan hämtas med följande URL:
[installation]/services/Boende/Integration/xsd/capitex.boendekalkyl.datastrukturer.in.xsd

([installation] är context-root för en boendekalkyl-installation, tex http://localhost/boendekalkyl)

xsd-filen finns också i biblioteket  boendekalkyl.integration.util.all.jar. Den xsd som finns där är den som var aktuell då dataklasserna i detta bibliotek genererades.

Exempel där ett spara-plugin hämtar all inmatat data:

public String SparaKalkyl(IKontext kontext, KalkylInfo kalkylinfo, KalkylData KalkylData) {
// Hämta service-objektet för gränssnittet IHaemtaIndata.
    IHaemtaIndata haemtaindata = (IHaemtaIndata)kontext.getService(IHaemtaIndata.class);
    // Hämta indata-xml.
    java.io.InputStream is=haemtaindata.HaemtaIndata();
 
    // Hantera XMLen här... tex mappa till javaobjekt.
 
   is.close(); 
 
    // Spara kalkylen i databas och returnera kalkyl-id.
}

boendekalkyl.integration.services.IHaemtaUtskrifter
public java.io.InputStream HaemtaUtskrift(String utskriftsnamn) throws Exception;

Funktionen skapar en PDF-utskrift med en sida. Vilken sida som ska skrivas ut anges med parametern utskriftsnamn, där utskriftsnamnet är namnet på någon complexType som ärver clsUtskrift. XSD för dessa typer kan hämtas med följande URL:
[installation]/services/Boende/Integration/xsd/capitex.boendekalkyl.datastrukturer.utskrifter.xsd

([installation] är context-root för en boendekalkyl-installation, tex http://localhost/boendekalkyl)

xsd-filen finns också i biblioteket  boendekalkyl.integration.util.all.jar. Den xsd som finns där är den som var aktuell då dataklasserna i detta bibliotek genererades.

boendekalkyl.integration.services.IHaemtaUtskrifter2
public java.io.InputStream HaemtaUtskrift(String utskriftsnamn, String Textrader, String HandlaeggareNamn, String HandlaeggareTelefon, boolean Brevpapper) throws Exception; 

Samma funktion som ovan men med inparametrar för att styra textrader, handläggarnamn, telefon och om sidhuvud ska vara med eller inte.

boendekalkyl.integration.services.IHaemtaUtskrifter3
public java.io.InputStream HaemtaUtskrift(String utskriftsnamn, String Textrader, String HandlaeggareNamn, String HandlaeggareTelefon, boolean Brevpapper, String mimetype) throws Exception; 

Samma funktion som ovan men med inparametrar för att styra dokumentformatet, se mer om det längre ner i detta dokument.

boendekalkyl.integration.services.IKomplettBeraekning1
public java.io.InputStream KomplettBeraekning() throws Exception;

Gör en beräkning baserad på de uppgifter som för tillfället finns i boendekalkylens användargränssnitt och returnerar det beräknade resultatet.

Den InputStream som returneras har teckenkodningen UTF-8 och innehåller ett XML-fragment av typen clsUt (rot-elementet har namnet xml-fragment). XSD för denna XML kan hämtas med följande URL:
[installation]/services/Boende/Integration/xsd/capitex.boendekalkyl.datastrukturer.ut.xsd

xsd-filen finns också i biblioteket  boendekalkyl.integration.util.all.jar. Den xsd som finns där är den som var aktuell då dataklasserna i detta bibliotek genererades.

capitex.integration.*

För de mer generella service-funktionerna som återfinns i capitex.integration, se stycket utveckla plugins/All Classes.

Förenklade anrop (boendekalkyl.integration.util.all.jar)

Gränssnitten ovan lämpar sig väl om man i plugin'et vill ha full kontroll och man kan använda sig av något ramverk för att mappa mellan XML och Java-object.

För att förenkla anropet av dessa funktioner tillhandahåller dock capitex ett helt fristående programbibliotek för att mappa mellan XML och Java-object så att XML-hanteringen blir helt inkapslad. Detta programbibliotek finns i boendekalkyl.integration.util.all.jar.

I detta programbibliotek finns dataklasser för boendekalkylen som automatgenererats med hjälp av Apache XML Beans. Dessa dataklasser ligger i paketet xmlbeans.capitex. Dessa dataklasser har också funktioner för att mappa till och från XML. Det finns också en wrapper-klass som kapslar in anropen till IKontext.getService().

I detta programbibliotek finns också följande 3:e-parts-bibliotek inkompilerade:

  • jsrxxx_x.x_api.jar

  • xml-resolver.jar

  • xmlbeans.jar

Dessa bibliotek kommer från en installation av xmlbeans. Om konflikt uppstår på grund av dessa klasser så kan vi på begäran leverera alla bibliotek var för sig. 

Detta programbibliotek ingår inte i EAR-paketeringen utan laddas ner separat. Boendekalklyen har inget beroende till boendekalkyl.integration.util.all.jar. 

En ny version av boendekalkyl.integration.util.all.jar behöver laddas ner om anroparen behöver tillgång till nya fält som tillkommit efter att den laddades ner senast. Det går dock alltid att köra med en gammal version version, även om man då inte får tillgång till alla fält. Det är upp till utvecklaren av plugin'et att använda en korrekt version för ändamålet.

boendekalkyl.integration.util.all.jar har ett beroende till capitex.integration.jar och boendekalkyl.integration.services.jar. Dessa två bibliotek återfinns i EAR'en. Plugin som använder funktioner i boendekalkyl.integration.util.all.jar behöver vid kompilering ha referenser till boendekalkyl.integration.util.all.jar och capitex.integration.jar (beroendet till boendekalkyl.integration.services.jar finns alltså enbart vid runtime).

boendekalkyl.integration.services.jar och capitex.integration.jar kopieras från EAR-paketeringen och installeras i classpath tillsammans med plugin-jar'en. Vid installation av nya uppdateringar av boendekalklyen så ska de nya versionerna av boendekalkyl.integration.services.jar och capitex.integration.jar plockas ut från EAR'en och ersätta de som tidigare användes av plugin'et (detta kräver ingen omkompilering av plugin).

Följande funktioner finns i klassen Funktioner

ClsIn HaemtaIndata() 
Hämtar den indata som för tillfället finns inmatat i boendekalkylens användargränssnitt.

ClsUt KomplettBeraekning() 
Utför en beräkning av det indata som för tillfället finns inmatat i boendekalkylens användargränssnitt och returnerar de beräknade uppgifterna.

InputStream HaemtaUtskrift(ClsUtskrift utskrift)
Skapar en utskrift i PDF-format.

InputStream HaemtaUtskrift(String utskriftsnamn, String Textrader, String HandlaeggareNamn, String HandlaeggareTelefon, boolean Brevpapper)
Skapar en utskrift i PDF-format.

InputStream HaemtaUtskrift(String utskriftsnamn, String Textrader, String HandlaeggareNamn, String HandlaeggareTelefon, boolean Brevpapper, String mimetype)
Skapar en utskrift i önskat format, formatet styrs av fältet mimetype. Exempel på ett par av de mimetyper som fungerar:

"application/pdf" - PDF
"application/rtf" - RTF
"text/html" - HTML

Vi garanterar än så länge enbart att utskriften "Kvar att leva på" ser godtagbar ut i andra format än PDF. Med godtagbar menar vi att att siffrorna finns på plats och inte kan misstolkas men att det desvärre kan se lite snett och vint ut och lite fel i marginaler och avstånd mm. Bilder och diagram stöds inte i något annat format än pdf än så länge, så flaggan Brevpapper bör sättas till true vid anrop. Nästan alla HTML-utskrifterna ser ok ut, men HTML-kodens uppbyggnad är inte helt bra enligt moderna principer som WAI och tillgänglighet för tex synskadade mm.

Exempel

public String SparaKalkyl(IKontext kontext, KalkylInfo kalkylinfo, KalkylData KalkylData) {
Funktioner intutil=new Funktioner(kontext);
 
  // Hämta indata typat.
  ClsIn indata=intutil.HaemtaIndata();
 
  // Hantera indata här... Här skriver vi ut fältet Taxeras som makar.
  System.out.println("Taxeras som makar: " + String.valueOf(indata.getTaxerasSomMakar()));
 
  // Hämta beräknad data typat.
  ClsUt utdata=intutil.KomplettBeraekning();
 
  // Hantera beräknad data här... Skriver tex ut KALP..
  System.out.println("KALP: " + String.valueOf(utdata.getResultatArray(0).getResultat().getKvarAttLevaPaaKrPerAAr()));
 
  // Spara kalkylen i databas och returnera kalkyl-id.
}