CIB JCoMod technischer Leitfaden (DE)

Site: CIB eLearning
Course: CIB JCoMod
Book: CIB JCoMod technischer Leitfaden (DE)
Printed by: Guest user
Date: Wednesday, 8 May 2024, 6:50 AM

Table of contents

1. Einführung

Dieser Leitfaden bietet eine kompakte Übersicht über verschiedene Möglichkeiten, um aus JAVA die CIB office Module (JCoMod) in Ihre Anwendungen zu integrieren. Dabei werden, aufbauend auf beispielhaften Anwendungsarchitekturen, praxisnahe Einsatzszenarien für die CIB office Module in Java-Anwendungen aufgezeigt. Der Schwerpunkt bei den beschriebenen Einsatzszenarien auf dem Server liegt auf den JCoMod-Komponenten ohne Benutzeroberfläche, während die Client-Einsatzszenarien die Integration der oberflächenbasierten JCoMod-Komponenten demonstrieren.

Der Java CIB office Module Wrapper (JCoMod) besteht aus Java-Klassen zur Ansteuerung der CIB office Module (CIB merge, CIB format inkl. output [ascii, html, pcl, pdf, postscript, print, tiff], CIB dialog, CIB view und CIB rec). Das Paket umfasst einzelne Jobklassen, die je einen Job (merge, format/output, view, dialog oder rec) nach Wünschen des Anwenders konfigurieren und ausführen.

Die JCoMod Jobklassen sind ab JDK Version 1.1.6 einsetzbar.

Die vorliegende Dokumentation gibt einen Überblick über die Eigenschaften und das Konzept der JCoMod Jobklassen. Detaillierte technische Schnittstellen und Aufrufparameter der einzelnen Jobklassen entnehmen Sie der technischen Referenz des Produkts, die als elektronische Online-Hilfe und Javadoc verfügbar ist.


2. JCoMod-Wrapper

Der JCoMod Wrapper besteht aus den Java Jobklassen und der zugehörigen native Verbindung zwischen den CIB office Modulen.

Übersicht JCoMod Wrapper

JCoMod-Jobklassen
JCoMod JNI - Verbindung

JCoMod-Jobklassen

Die JCoMod-Jobklassen kapseln über das Java native Interface (JNI) die gesamten Dienste der CIB office Module in Java Jobklassen. Aus Sicht des Java Programmierers stehen ihm damit komplette ”pure Java” Schnittstellen für die Programmierung der Dokumentengenerierung zur Verfügung. 

Job

Beschreibung

JCibCryptJob

Java-Klasse zum Ansteuern des CIB crypt

JCibDialogJob

Java-Klasse für dynamische regelgestützte Restdatenerfassung mit dem native CIB dialog HTML Browser

JCibDialogPureJavaJob

 

JCibDiffJob

Java-Klasse zum Ansteuerung der CIB diff

JCibEpdfJob

Java-Klasse zum Ansteuern des CIB ePDF

JCibFormatJob

Java-Klasse für komplette RTF Ausgabeströme über CIB format/output (Druck&Seitenvorschau, ASCII, HTML, PDF, PCL, Postscript, TIFF)

JCibGsJob

 

JCibJobJob

Java-Klasse zum Ansteuern von CIB job

JCibMailJob

Java-Klasse für eMailversand (derzeit via MAPI/WIN32)

JCibMergeJob

Java-Klasse für dynamische RTF – Variablenintegration und Aufbereitung mit CIB merge

JCibPadJob

Java-Klasse zum Ansteuern von CIB pad

JCibPdfJoinJob

Java-Klasse zum Ansteuern der CIB pdf toolbox

JCibPdfMergeJob

Java-Klasse zum Ansteuern der pdf-Mischaufträge mit der CIB pdf toolbox

JCibPdfPrintJob

Java-Klasse zum Ansteuern der CIB view Silentdruck Funktion

JCibRecJob

Java-Klasse für RTF Editorsitzung mit CIB rec

JCibViewJob

Java-Klasse zum Ansteuern des CIB view

JCibViewPureJavaJob

 


JCoMod JNI - Verbindung

Ein für den Anwendungsprogrammierer unsichtbarer Bereich ist die JNI-Verbindung zwischen den JCoMod Jobs und den native CIB office Modulen. Diese ist auf Basis einer C++ Zwischenschicht in Form einer DLL bzw. shared library (Unix-Systeme) umgesetzt worden.


3. Serverszenarien im Vergleich

Dieses Kapitel zeigt Ihnen in einem Kurzüberblick mögliche Architekturen.

3.1. Anwenderszenario ”JCoMod-Wrapper”

Application Server sind derzeit das Herzstück moderner Web-orientierter Softwarearchitekturen. Untere Abbildung zeigt eine mögliche Anwendungsarchitektur "für das Generieren von PDF Dokumenten" auf einem Application Server.

Es wird dabei der JCoMod Wrapper eingesetzt. Dieser Prozess kann dateibasiert oder dateilos (Streaming) umgesetzt werden.

Übersicht Serverarchitektur mit ”J2EE” API‘s und dem JComodWrapper


3.2. Anwenderszenario ”CIB runshell”

Die CIB runshell ist eine native Anwendung, die den kompletten Funktionsumfang der CIB office Module über die Kommandozeile verfügbar macht. Sie ist verfügbar für Windows, OS/2, Solaris, Linux, HP-UX und AIX.

Da die CIB runshell als eigener Prozess läuft, kann sie die Ausführung der Java-VM nicht beeinträchtigen. Die Funktionen der CIB office Module können so sowohl synchron als auch asynchron ausgeführt werden. Das Schaubild zeigt eine mögliche Anwendungsarchitektur in Verbindung mit der CIB runshell auf einem Application Server:

CIB runshell auf einem Application Server

Ein erweitertes Feature der CIB runshell ist die Festlegung der Prozesspriorität, mit der sie selbst laufen soll. Es werden alle auf dem entsprechenden System verfügbaren Prozessprioritäten unterstützt. Das ermöglicht z. B., dass eine mit normaler Priorität laufende Java-VM eine Instanz der CIB runshell startet, die mit niedriger Priorität läuft. So können parallel ablaufende Prozesse – beispielsweise auf einem Application Server – schneller Ressourcen anfordern, während die CIB runshell den Prozessor nicht vollständig ausreizt. Bitte beachten Sie, dass eine niedrige Prozesspriorität aber auch eine spürbar längere Ausführungszeit des CIB runshell-Prozesses zur Folge hat.


3.3. Erweiterung ”CIB job”

Der Auftragsmanager CIB job bietet eine Abstraktion der Dokumenterzeugung gegenüber der Ansteuerung der CIB docgen Module und verzichtet dabei auf Zwischendateien.

Dies wird durch die Spezifikation von Auftragsbeschreibungen im XML-Format erreicht. Das heißt, die Kundenanwendung beschreibt die Reihenfolge der abzuarbeitenden Aufrufe der verschiedenen CIB docgen-Module mit einer XML-Datei (Auftragsdatei), die außerdem auch die zu verwendenden Nutzdaten enthält.

Weitere Informationen zu CIB job finden Sie in der Dokumentation "CIB documentServer Überblick" und eine Beschreibung von Auftragsdateien finden Sie in der Dokumentation "CIB documentServer Details".

Komponentenansicht ”CIB job”

3.4. Anwenderszenario ”CIB documentServer”

Weiterführende Anforderungen im Serverumfeld führen zu einer Trennung von Webanwendung und Dokumentgenerierung. Der CIB documentServer ermöglicht durch den Einsatz von Sockets eine Entkoppelung der verschiedenen Betriebssystemprozesse, wodurch eine bessere Stabilität, Verfügbarkeit und Skalierbarkeit erreicht wird. Ausnahmen in der Dokumentgenerierung können zum Beispiel im Fall von Java die VM nicht mehr beeinträchtigen.

Zusätzlich wird über die Spezifikation von Auftragsbeschreibungen im XML-Format (CIB job) eine Abstraktion der Dokumenterzeugung gegenüber der Ansteuerung der CIB docgen erreicht. Ein Java Framework erlaubt die bequeme Erzeugung der XML-Aufträge, die neben den Anweisungen und Einstellungen für die CIB docgen auch die zu verwendenden Nutzdaten enthalten.

Der CIB documentServer ist in allen Teilen modular aufgebaut, so dass die benötigten Komponenten auch herausgelöst und an die individuellen Anforderungen Ihrer technischen Lösung optimal angepasst werden können.

Zum Beispiel können Sie die XML-Auftragsbearbeitung CIB job auch direkt über eine C-Schnittstelle ansteuern, das Java-Framework direkt in Ihre Webanwendung einbinden oder eine eigene Ansteuerung der CIB socketserver einsetzen. Ein Aufruf aus EJB-Komponenten ist ebenso möglich wie die Integration in MQ-Series.

Weitere Informationen finden Sie in der Dokumentation "CIB documentServer Überblick".

Beispielanbindung ”Dokumentserver” in mehreren Instanzen mit Loadbalancing

4. Clientszenarien

Der JCoMod Wrapper eignet sich auf Client Seite insbesondere dazu, die GUI-basierten CIB office Module wie CIB view, CIB dialog und das CIB rec Control aus Java-Anwendungen zu benutzen.


4.1. Java-Anwendung nutzt den native CIB view

Untere Abbildung zeigt eine mögliche Anwendungsarchitektur für die Integration des nativen CIB view in eine Java-Umgebung.

Abbildung wird noch ergänzt.


4.2. Java-Anwendung nutzt das native CIB rec Control

Untere Abbildung zeigt die Integration eines CIB rec Controls in eine Java-Eingabemaske.


5. Schneller Einstieg

Dieses Kapitel zeigt Ihnen mit kleineren JCoMod Codebeispielen verschiedenste Anwendungsfälle zur Nutzung der CIB office Module.

Die ausführliche Beschreibung der technischen Schnittstellen entnehmen Sie bitte den technischen Leitfäden der einzelnen CIB office Module bzw. aus der Javadoc der JCoMod-Jobs.


5.1. JCoMod Wrapper-Beispiel für CIB format: Job zum Auswerten von RTF Feldinformationen über einen Analyse-Callback

Das nachfolgende Beispiel benutzt die CIB format Komponente um ein RTF Wurzeldokument inkl. dort abhängiger "includierter" Dokumente durchzuparsen und über einen Analyse-Callback der CIB format Komponente zu den in den Textbausteinen enthaltenen Feldinformationen jeweils Rückmeldungen zu geben.

Der Analyse-Callback liefert jeweils eine ID und einen zugehörigen String mit inhaltlichen Informationen.

import com.cib.comod.jobs.*;
import com.cib.comod.jobs.event.*;
 
import de.cib.util.trace.*;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
 
public class JComodTestCase extends TestCase {
    public static final String TESTPATH = "D:\\jcomod\\";
   
    public static void main(String[] args) {
        JComodTestCase test = new JComodTestCase();
        try {
            test.runTest();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
    public static Test suite() {
        TestSuite suite = new TestSuite("JComod");
        suite.addTest(new JComodTestCase());
        return suite;
    }
    /* (non-Javadoc)
     * @see junit.framework.TestCase#runTest()
     */
    protected void runTest() throws Throwable {
        testFieldAnalyze();
    }
    public static void testFieldAnalyze() {
       ICibFormatCallbackListener listener = new JCibFormatCallbackAdapter() {
            public void callbackFormatOnField(FormatOnFieldCallbackEvent e) {
              System.out.println(""+e.FieldID+" "+e.FieldData);
                switch(e.FieldID) {
                    case 46: //Begin of REF field
                       break;
                    case 1046: //end of REF field
                     System.out.println("REF fieldname:"+e.FieldData);
                       break;
                    case 50: //Begin of MERGEFIELD field
                       break;
                    case 1050: //end of MERGEFIELD field
                      System.out.println("MERGEFIELD fieldname:"+e.FieldData);
                       break;
                    case 27: //Begin of INCLUDETEXT field
                       break;
                    case 1027: //end of INCLUDETEXT field
                      System.out.println("INCLUDETEXT fieldname:"+e.FieldData);
                       break;
                }
            }
        };
        //generate Job for CIB format DLL
        JCibFormatJob t_Job = new JCibFormatJob();
        //loads DLL
        if (!t_Job.initialize())
           return;
        //set callback type
       t_Job.executeFunction(ICibFormatJob.FUNCTION_ACTIVATECALLBACK, "FieldCallback");
       t_Job.addCibFormatCallbackListener(listener);
        //set rtf inputfile which should be analyzed
       t_Job.setProperty(ICibFormatJob.PROPERTY_INPUTFILE,"root.rtf");
        //activate, that includes should be analyzed as well
       t_Job.setProperty(ICibFormatJob.PROPERTY_INCLUDETEXT,"1");
        //set workspace, where included rtfs can be found
       t_Job.setProperty(ICibFormatJob.PROPERTY_WORKSPACE,TESTPATH+           "./templates");
        t_Job.execute();
        //Fehlerbehandlung
        int t_Error =
        ((Integer)t_Job.getProperty(ICibFormatJob.PROPERTY_ERROR)).intValue();         if (t_Error != 0) {
            // Fehler beim Ausführen des Jobs
            String t_Errortext = (String)
           t_Job.getProperty(ICibFormatJob.PROPERTY_ERRORTEXT);
            System.out.println("Fehler beim Ausführen: "+t_Error+"             "+t_Errortext);
        }
        t_Job.executeFunction(ICibFormatJob.FUNCTION_DEACTIVATECALLBACK,         "FieldCallback");
        t_Job.removeCibFormatCallbackListener(listener);
        t_Job.dispose();
    }
}


5.2. JCoMod Wrapper-Beispiel für CIB merge: Job zum Einmischen von CSV-Daten in RTF-Dokumente

import com.cib.comod.jobs.*;

public boolean doMergeJob() {
    JCibMergeJob t_Job = new JCibMergeJob();
    t_Job.initialize();
    if (!t_Job.isInitialized()) {
        System.out.println("Fehler beim Initialisieren des JCibMergeJob");
        t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    };

    t_Job.setProperty(ICibMergeJob.PROPERTY_WORKSPACE, "d:\\test");
    t_Job.setProperty(ICibMergeJob.PROPERTY_ERRORFILE, "merge.log");
    t_Job.setProperty(ICibMergeJob.PROPERTY_INPUTFILE, "input.rtf");
    t_Job.setProperty(ICibMergeJob.PROPERTY_OUTPUTFILE, "output.rtf");
    t_Job.setProperty(ICibMergeJob.PROPERTY_DATAFILE, "data.csv");
    // wenn die csv eine Multi-csv ist, dann folgende Zeile ausführen
    //t_Job.setProperty(ICibMergeJob.PROPERTY_MULTICSV, new Boolean(true));
    //Job ausführen
    t_Job.execute();

    //Fehlerbehandlung
    int t_Error =
        ((Integer)t_Job.getProperty(ICibMergeJob.PROPERTY_ERROR)).intValue();
    if (t_Error != 0) {
        // Fehler beim Ausführen des Jobs
        String t_Errortext = (String)
             t_Job.getProperty(ICibMergeJob.PROPERTY_ERRORTEXT);
        System.out.println("Fehler beim Ausführen: "+t_Error+" "+t_Errortext);
        t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    }
    t_Job.dispose(); // Resourcen des Jobs freigeben (seit jcomod 2.0)
    return true;
}

5.3. JCoMod Wrapper-Beispiel für CIB format: Job zum Umwandeln eines RTF-Dokuments in ein PDF-Dokument

import com.cib.comod.jobs.*;

public boolean doPdfJob() {
    JCibFormatJob t_Job = new JCibFormatJob(); 
    t_Job.initialize(); 
    if (!t_Job.isInitialized()) {
       System.out.println("Fehler beim Initialisieren des JCibFormatJob");
       t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
       return false;
    }
    //falls vorhanden Lizenzdaten angeben
    //t_Job.setProperty(ICibFormatJob.PROPERTY_LICENSEKEY, "...");
    //t_Job.setProperty(ICibFormatJob.PROPERTY_LICENSECOMPANY, "...");
    //RTF Eingangsdokument
    t_Job.setProperty(ICibFormatJob.PROPERTY_INPUTFILE, "input.rtf");
    //zu erzeugendes PDF Dokument
    t_Job.setProperty(ICibFormatJob.PROPERTY_OUTPUTFILE, "output.pdf");
    //Arbeitsverzeichnis in dem die Dokumente liegen
    t_Job.setProperty(ICibFormatJob.PROPERTY_WORKSPACE, "d:\\test");
    //Gewünschtes Ausgabeformat
    t_Job.setProperty(ICibFormatJob.PROPERTY_OUTPUTFORMAT, "FormatPdf");

    //Job ausführen
    t_Job.execute();

    //Fehlerbehandlung
    int t_Error =
        ((Integer)t_Job.getProperty(ICibFormatJob.PROPERTY_ERROR)).intValue();
    if (t_Error != 0) {
        // Fehler beim Ausführen des Jobs
        String t_Errortext = (String)
            t_Job.getProperty(ICibFormatJob.PROPERTY_ERRORTEXT);
        System.out.println("Fehler beim Ausführen: "+t_Error+" "+t_Errortext);
        t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    }
        t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
    return true;
}

5.4. JCoMod Wrapper-Beispiel für die CIB pdf toolbox: Job zum direkten Druck eines PDF-Dokumentes

import com.cib.comod.jobs.*;
public class DirectPrintPdf {
	public static void main(String[] args) {
		JCibPdfJoinJob t_PDFJob = new JCibPdfJoinJob();
		t_PDFJob.initialize();
		if (!t_PDFJob.isInitialized()) {
			System.out.println("Fehler beim Initialisieren der Dll");
			return;
		}
		//PDF-Datei festlegen z.B. ein Test.pdf
		t_PDFJob.setProperty(ICibPdfJoinJob.PROPERTY_INPUTFILE, "Test.pdf");
		//Druckernamen festlegen z.B. HP LaserJet 4100 Series PS
		t_PDFJob.setProperty("PrinterName", "HP LaserJet 4100 Series PS" );
		//Ausgabeformat festlegen
		t_PDFJob.setProperty(ICibPdfJoinJob.PROPERTY_OUTPUTFORMAT, "FormatPrinter");
		//Prozess starten
		t_PDFJob.execute();
		int t_ReturnValue =((Integer)t_PDFJob.getProperty(ICibFormatJob.PROPERTY_ERROR)).intValue();
		if (t_ReturnValue != 0) {
			System.out.println("Fehler! CIB pdf toolbox returns " + t_ReturnValue);
		}
		t_PDFJob.dispose();
	}
}


5.5. JCoMod Wrapper-Beispiel für CIB view: Job zum Anzeigen eines RTF-Dokuments und Versenden als PDF-Attachment

import com.cib.comod.jobs.*;

public boolean doViewJob() {
    JCibViewJob t_Job = new JCibViewJob();
    t_Job.initialize();
    if (!t_Job.isInitialized()) {
        System.out.println("Fehler beim Initialisieren des JCibViewJob");
        t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    };
    //falls vorhanden Lizenzdaten angeben
    //t_Job.setProperty(ICibViewJob.PROPERTY_LICENSEKEY, "...");
    //t_Job.setProperty(ICibViewJob.PROPERTY_LICENSECOMPANY, "...");
    //Für die Verfügbarkeit der Mailanbindung setzen Sie
    t_Job.setProperty(ICibViewJob.PROPERTY_DISABLEMAIL, new Boolean(false));
    // Für die Verfügbarkeit eines separaten Speichern Buttons
    t_Job.setProperty(ICibViewJob.PROPERTY_DISABLESAVE, new Boolean(false));
    //damit hinter dem Speichern Button ein "Speichern unter" Dialog erscheint
    t_Job.setProperty(ICibViewJob.PROPERTY_SAVEASDIALOG, new Boolean(true));
    //Welche Formate beim "Speichern unter" angeboten werden bestimmen Sie mit
    t_Job.setProperty(ICibViewJob.PROPERTY_SAVEFORMATS, "FormatPdf");
    t_Job.setProperty(ICibViewJob.PROPERTY_INPUTFILE, "input.rtf");

    //Job ausführen
    t_Job.execute();

    //Fehlerbehandlung
    int t_Error = 
        ((Integer)t_Job.getProperty(ICibViewJob.PROPERTY_ERROR)).intValue();
    if (t_Error != 0) {
        // Fehler beim Ausführen des Jobs
        String t_Errortext = (String)
            t_Job.getProperty(ICibViewJob.PROPERTY_ERRORTEXT);
        System.out.println("Fehler beim Ausführen: "+t_Error+" "+t_Errortext);
        t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    }
    t_Job.dispose(); // Resourcen des Jobs freigeben (seit jcomod 2.0)
    return true;
}

5.6. JCoMod Wrapper-Beispiel für CIB view: Job zum Anzeigen eines RTF-Dokuments in einem modal gestarteten Cib View

import com.cib.comod.jobs.*;
import javax.swing.JFrame;

public boolean doViewJob(String a_Input) {
    JCibViewJob t_Job = new JCibViewJob();
    t_Job.initialize();
    if (!t_Job.isInitialized()) {
        System.out.println("Fehler beim Initialisieren des JCibViewJob");
        t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    };

    //Definieren der Variable für das WindowHandle
    Integer t_AncestorWindowHandle = new Integer(0);

    //OwnerFrame erstellen
    JFrame t_OwnerFrame = new JFrame();
    //Frame Größe setzen
    t_OwnerFrame.setSize(800, 800);
    //Frame Titel setzen
    t_OwnerFrame.setTitle("View");
    //Frame auf bestimmte Stelle setzen
    t_OwnerFrame.setLocation(10, 15);
    //Frame unsichtbar machen
    t_OwnerFrame.setVisible(false);
    //AncestorWindowHandle erfragen
    t_AncestorWindowHandle = new Integer(new Long(t_Job
    .getWin32WindowHandle(t_OwnerFrame)).intValue());
    //Inputfile setzen
    t_Job.setProperty(ICibViewJob.PROPERTY_INPUTFILE, a_Input);
    //ModalWindow wird gesetzt
    t_Job.setProperty("CVWUseModalWindow", "1");
    //OwnerHwnd setzen
    t_Job.setPropertyImmediate(ICibViewJob.PROPERTY_OWNERHWND,
    t_AncestorWindowHandle);

    //Job ausführen
    t_Job.execute();

    //Fehlerbehandlung
    int t_Error = 
        ((Integer)t_Job.getProperty(ICibViewJob.PROPERTY_ERROR)).intValue();
    if (t_Error != 0) {
        // Fehler beim Ausführen des Jobs
        String t_Errortext = (String)
            t_Job.getProperty(ICibViewJob.PROPERTY_ERRORTEXT);
        System.out.println("Fehler beim Ausführen: "+t_Error+" "+t_Errortext);
        t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    }
    t_Job.dispose(); // Resourcen des Jobs freigeben (seit jcomod 2.0)
    return true;
}

5.7. JCoMod Wrapper-Beispiel für CIB dialog browser: Job zum Anzeigen und Bearbeiten einer HTML-Seite mit Regelwerk und CSV-Dateien

import com.cib.comod.jobs.*;
import com.cib.comod.jobs.event.*;

public boolean doDialogJob() {
JCibDialogJob t_Job = new JCibDialogJob();
    t_Job.initialize();
    if (!t_Job.isInitialized()) {
        System.out.println("Fehler beim Initialisieren des JCibDialogJob");
        t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    }

    // Properties setzen
    t_Job.setProperty(ICibDialogJob.PROPERTY_INPUTFILE, "cibdemo.htm");
    t_Job.setProperty(ICibDialogJob.PROPERTY_RULFILE, "cibdemo.rul");
    t_Job.setProperty(ICibDialogJob.PROPERTY_DATAFILE, "cibdemo.csv"); 
    t_Job.setProperty(ICibDialogJob.PROPERTY_WORKSPACE, "d:\\test");

    // Callbacks setzen
    t_Job.executeFunction
    (ICibDialogJob.FUNCTION_ACTIVATECALLBACK, "LeaveCallback");
    t_Job.executeFunction
    (ICibDialogJob.FUNCTION_ACTIVATECALLBACK, "EnterCallback");

    // Callbackhandler registrieren und Funktionen festlegen
    t_Job.addCibDialogCallbackListener(new JCibDialogCallbackAdapter() {
        public void callbackDialogOnLeave() {
            System.out.println("callbackDialogOnLeave(): Leaving Control
                  "+e.Control+"["+e.Index+"] \""+e.Value
                  +"\", next Control "+e.NextControl+"["+e.NextIndex+"]\n");
        }
        public void callbackDialogOnEnter() {
           System.out.println("callbackDialogOnEnter(): Entering Control
              "+e.Control+"["+e.Index+"] \""+e.Value +"\", Direction=
              "+e.TabDirection+"\n");
       }
    } // Listener
    ); //new schließen

    //Job ausführen
    t_Job.execute();

    //Fehlerbehandlung
    int t_Error = 
        ((Integer)t_Job.getProperty(ICibDialogJob.PROPERTY_ERROR)).intValue();
    if (t_Error == 0) {
        // gedrückten Button ermitteln
        String t_Button = (String)t_Job.getProperty
                            (ICibDialogJob.PROPERTY_PRESSEDBUTTON);

        if (t_Button.equals("ANSEHEN")) {
            //starte einen CIB view
            JCibViewJob t_ViewJob = new JCibViewJob();
            t_ViewJob.initialize();
            if (!t_ViewJob.isInitialized()) {
             System.out.println("Fehler beim Initialisieren des JCibViewJob");
             t_ViewJob.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
             t_Job.dispose();
             return false;
            }
            t_ViewJob.setProperty(
                  ICibViewJob.PROPERTY_INPUTFILE, "test.rtf");
            t_ViewJob.execute();
            String t_Errortext = (String)
            ViewJob.getProperty(ICibViewJob.PROPERTY_ERRORTEXT);
            System.out.println("Fehler beim Ausführen: "+t_Error+" "+t_Errortext);
            ViewJob.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
            t_Job.dispose();
            return false;
        }
    } else {
        // Fehler beim Ausführen des Jobs
        String t_Errortext = (String)
            t_Job.getProperty(ICibDialogJob.PROPERTY_ERRORTEXT);
        System.out.println("Fehler beim Ausführen: "+t_Error+" "+t_Errortext);
        t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    }
    t_Job.dispose(); // Resourcen des Jobs freigeben (seit jcomod 2.0)
    return true;
}

5.8. JCoMod Wrapper-Beispiel für CIB dialog browser: Job zum Anzeigen eines HTML-Dokuments über CIB dialog sowie Nutzung der Dialog Callbackmechanismen am Beispiel OnTextboxPopupCallback/OnTextboxEntryCallback

import com.cib.comod.jobs.*;
import com.cib.comod.jobs.event.*;

public class TextboxCBSample 
{
 static ICibDialogCallbackListener m_CallbackAdapter;

 public TextboxCBSample()
 {
  m_CallbackAdapter = null;
 }

 public static void main(String [] args) 
 {
  // erzeuge einen JCibDialog-Job
  JCibDialogJob t_Job = new JCibDialogJob();

  // Der Job muß initialisiert werden
  if (!t_Job.initialize())
  {
   System.out.println("Fehler beim Initialisieren des Dialog-Job");
   return;
  }

  //hier richtige Dateinamen einfügen
  t_Job.setProperty(ICibDialogJob.PROPERTY_INPUTFILE, "D:\\XYZ.HTM");
  t_Job.setProperty(ICibDialogJob.PROPERTY_RULFILE, "D:\\XYZ.RUL");

  // füge dem Job einen Callbacklistener hinzu.
  // 
  // Der JCibDialogCallbackAdapter implementiert alle Callbackmethoden des
  // ICibDialogCallbackListener-Interfaces. Callback-Events werden nur
  // erzeugt, wenn die entsprechenden Callbacks auch per setProperty 
  // gesetzt werden.
  //
  // Hier wird gleich eine on-the-fly-Klasse von JcibDialogCallbackListener
  // abgeleitet und die Callbackmethoden überladen.
  //
  // Der CallbackAdapter empfiehlt sich vor allem dann
  // wenn nicht alle Callbacks gebraucht werden. Außerdem wird der
  // JcibDialogCallbackAdapter auch neue Callbacks implementieren, 
  // wenn noch weitere hinzukommen.
  t_Job.addCibDialogCallbackListener
  (m_CallbackAdapter = new JCibDialogCallbackAdapter()
   {
    public void callbackDialogOnTextboxPopup(DialogOnTextboxPopupCallbackEvent e) {callbackOnTextboxPopup(e);}
    public void callbackDialogOnTextboxEntry(DialogOnTextboxEntryCallbackEvent e) {callbackOnTextboxEntry(e);}
   }
  );
 
   // aktiviere die nötigen Callbacks
  t_Job.executeFunction(ICibDialogJob.FUNCTION_ACTIVATECALLBACK, "TextboxPopupCallback");
  t_Job.executeFunction(ICibDialogJob.FUNCTION_ACTIVATECALLBACK, "TextboxEntryCallback");
  t_Job.setProperty(ICibDialogJob.PROPERTY_CALLBACKUSERDATA, new Integer(777));
 
  //Dialog anzeigen
  t_Job.execute();
 }
 
 public static void callbackOnTextboxPopup(DialogOnTextboxPopupCallbackEvent e) 
 {
      //zwei Test-Einträge zur Verfügung stellen
      e.PopupEntries = "Test1a|Test2b";
 }
 
 public static void callbackOnTextboxEntry(DialogOnTextboxEntryCallbackEvent e) 
 {
     //Abhängig von der Auswahl einen Textbaustein in den Dialog einfügen
     //(nur MLE Editfelder)
      if (e.SelectedPopupEntry.compareTo("Test1a") == 0)
      {
           e.SelectedText = "Textbaustein1";
      }
      else if(e.SelectedPopupEntry.compareTo("Test2b") == 0)
      {
           e.SelectedText = "Textbaustein2";
      }
 }
}

5.9. JCoMod Wrapper-Beispiel für CIB mail: Job zum (Batch-)Versand eines Dokuments über CIB mail (nur Win32/MAPI)

import com.cib.comod.jobs.ICibMailJob;
import com.cib.comod.jobs.JCibMailJob;

public boolean doMailJob()
{
    JCibMailJob t_Job = new JCibMailJob(); 
    t_Job.initialize(); 
    if (!t_Job.isInitialized())
    {
        System.out.println("Fehler beim Initialisieren des JCibMailJob");
        //t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    };
    //t_Job.setProperty(ICibFormatJob.PROPERTY_LICENSEKEY, "..."); 
    //t_Job.setProperty(ICibFormatJob.PROPERTY_LICENSECOMPANY, "..."); 
    // Folgende Zustände können abgefragt werden: 
    // MailNone, MailActive, MailDeactivated 
    String t_MailAvailable =
              (String)t_Job.getProperty(ICibMailJob.PROPERTY_MAILAVAILABLE);

    // Den Maildialog benutzen, kein Batchbetrieb! 
    t_Job.setProperty(ICibMailJob.PROPERTY_MAILDIALOG, new Boolean(true));

    // Mailsystem ist möglicherweise nicht aktiv, es soll aber trotzdem 
    // - wenn möglich - Email genutzt werden 
    t_Job.setProperty(ICibMailJob.PROPERTY_MAILLOGONDIALOG,new Boolean(true));

    // Email-Adresse, Betreff und Attachments einstellen
    t_Job.setProperty(ICibMailJob.PROPERTY_MAILRECIPIENT ,"mustermann@musterserver.de");
    t_Job.setProperty(ICibMailJob.PROPERTY_MAILSUBJECT ,"Sehr wichtig!");
    t_Job.setProperty(ICibMailJob.PROPERTY_MAILATTACHMENTS ,"c:\temp\wichtig.rtf");

      //Job ausführen
      t_Job.execute();

    //Fehlerbehandlung
    int t_Error = 
        ((Integer)t_Job.getProperty(ICibMailJob.PROPERTY_ERROR)).intValue();
    if (t_Error != 0)
    {
        // Fehler beim Ausführen des Jobs
        String t_Errortext = (String)
            t_Job.getProperty(ICibMailJob.PROPERTY_ERRORTEXT);
        System.out.println("Fehler beim Ausführen: "+t_Error+" "+t_Errortext);
        //t_Job.dispose(); // Resourcen d. Jobs freigeben (seit jcomod 2.0)
        return false;
    }
    //t_Job.dispose(); // Resourcen des Jobs freigeben (seit jcomod 2.0)
    return true;
}

5.10. JCoMod Wrapper-Beispiel für CIB format/postscript: Job zum Drucken eines RTF-Dokuments als Postscript

import com.cib.comod.jobs.ICibFormatJob;
import com.cib.comod.jobs.JCibFormatJob;

public boolean doPostscriptJob(String a_Input, String a_Output, String a_Workspace)
{
    JCibFormatJob t_Job = new JCibFormatJob(); 
    t_Job.initialize(); 
    if (!t_Job.isInitialized()) 
    {
       System.out.println("Fehler beim Initialisieren des JCibFormatJob"); 
       t_Job.dispose(); // Resourcen d. Jobs freigeben
       return false;
    }

    //t_Job.setProperty(ICibFormatJob.PROPERTY_LICENSEKEY, "..."); 
    //t_Job.setProperty(ICibFormatJob.PROPERTY_LICENSECOMPANY, "..."); 

    //RTF Eingangsdokument
    t_Job.setProperty(ICibFormatJob.PROPERTY_INPUTFILE, "input.rtf"); 

    //zu erzeugendes Postscript Dokument
    t_Job.setProperty(ICibFormatJob.PROPERTY_OUTPUTFILE, "output.ps"); 

    //PPD Datei mit den Druckerinformationen
    t_Job.setProperty(ICibFormatJob.PROPERTY_PRINTERNAME, "lp"); 

    //Arbeitsverzeichnis in dem die Dokumente liegen
    t_Job.setProperty(ICibFormatJob.PROPERTY_WORKSPACE, "/user/test"); 

    //Fontverzeichnis in dem die Fonts liegen
    t_Job.setProperty(ICibFormatJob.PROPERTY_FONTWORKSPACE, "/user/fonts"); 

    //PPD Datei mit den Druckerinformationen
    t_Job.setProperty(ICibFormatJob.PROPERTY_PPDFILE, "/user/hp4000.ppd"); 

    //Gewünschtes Ausgabeformat
....//Postscript direkt auf den Drucker
    t_Job.setProperty(ICibFormatJob.PROPERTY_OUTPUTFORMAT, "FormatPrinterPs"); 

    //Job ausführen
    t_Job.execute();

    //Fehlerbehandlung
    int t_Error =
        ((Integer)t_Job.getProperty(ICibFormatJob.PROPERTY_ERROR)).intValue();
    if (t_Error != 0)
    {
        // Fehler beim Ausführen des Jobs
        String t_Errortext = (String)
            t_Job.getProperty(ICibFormatJob.PROPERTY_ERRORTEXT);
        System.out.println("Fehler beim Ausführen: "+t_Error+" "+t_Errortext);
        t_Job.dispose(); // Resourcen d. Jobs freigeben 
        return false;
    }
        t_Job.dispose(); // Resourcen d. Jobs freigeben
    return true;
}

5.11. JCoMod Wrapper-Beispiel für CIB rec: Nutzung als Editcontrol in einer Java-Eingabemaske

package de.cib.comod.test;

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import com.cib.tools.rec.JCibRec;

public class RecSampleFrame extends JFrame 
{	
	JCibRec m_Rec;
			
	public RecSampleFrame()
	{
		//Frame erstellen
		makeFrame();
	}

	private void makeFrame()
	{
		//nötige Properties setzen
		setTitle("CIB rec - Testframe");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		//Frame unbedingt bereits jetzt sichtbar machen
		setVisible(true);
		
		//Rec hinzufügen
		addComponentsToPane(this.getContentPane());
		pack();
		
		//RTF in das Rec setzen (über Filename)
		m_Rec.setRTF("c:\\temp\\test.rtf");
		//RTF in das Rec setzen (über String)
		//String t_RTF = "{\rtf1...";
//m_Rec.setRTF(t_RTF);
		m_Rec.update();
	}

	public void addComponentsToPane(Container pane) 
	{
		//Rec benötigt den Bezug zum Parent-JFrame
		m_Rec = new JCibRec(this);
		pane.add(m_Rec,BorderLayout.CENTER);
    }

	public static void main(String[] args)
	{
		new RecSampleFrame();
	}
}

5.12. JCoMod Wrapper-Beispiel für CIB job: JCibjobjob zur konvertierung eines RTFs zu einer PDF-Ausgabe

package example;

import java.io.File;

import com.cib.comod.jobs.IComodJob;
import com.cib.comod.jobs.JCibJobJob;
import com.cib.comod.jobs.JComodJob;

public class JCoMod {

	private static final String s_LICENSECOMPANY = "XXX GmbH";
	private static final String s_LICENSEKEY = "XXXX-XXXX-XXXXXXXX";

	public static void main(String[] args){

		JCoMod test = new JCoMod();

		JComodJob j_Job = test.loadJob();

		test.executeJob(j_Job);
	}

	public JComodJob loadJob(){
		System.out.println("----------Module - Initialisierung----------");
		JComodJob t_Job = new JCibJobJob();
		t_Job.initialize();
		if (!t_Job.isInitialized()){
			System.out.println("Fehler beim Initialisieren des JCibJobJob");
			t_Job.dispose(); // Resourcen d. Jobs freigeben
		} else {
			System.out.println("JCibJobJob initialisiert");
			String version = (String) t_Job.getProperty(JComodJob.PROPERTY_VERSIONSTRING);    
			System.out.println("CIB job version: " + version);
		}
		return t_Job;
	}

	public void executeJob(JComodJob t_Job){
		try{
			t_Job.setProperty(JCibJobJob.PROPERTY_LICENSECOMPANY, s_LICENSECOMPANY);
			t_Job.setProperty(JCibJobJob.PROPERTY_LICENSEKEY, s_LICENSEKEY);

			if (new File("./input/input.xml").exists())
				System.out.println("Input File Exists");
			t_Job.setProperty(JCibJobJob.PROPERTY_INPUTFILENAME,"./input/input.xml");
			t_Job.setProperty(JCibJobJob.PROPERTY_OUTPUTFILENAME,"./output/output.xml");
			t_Job.execute();
			//Fehlerbehandlung
			int t_Error = ((Integer) t_Job.getProperty(IComodJob.PROPERTY_ERROR)).intValue();

			if (t_Error != 0){
				// Fehler beim Ausführen des Jobs
				String t_Errortext = (String) t_Job.getProperty(IComodJob.PROPERTY_ERRORTEXT);
				System.err.println("Fehler beim Ausführen: "+t_Error+" "+t_Errortext);
			} else {
				System.out.println("Job-Ausgabe richtig generiert");
			}
		} finally {
			t_Job.terminate();
		}
	}
}

5.13. JCoMod Wrapper-Beispiel für CIB runshell: Aufruf der nativen CIB runshell aus Java mit Inifile für eine CIB pdf-Konvertierung

package de.cib.sample.comod;
import de.cib.comod.RunshellProcess;
import java.io.File;

boolean doPdfFormatRunshellProcess() {

	//RunshellProcess mit dem Executable erstellen
	RunshellProcess t_cibRunShell = new RunshellProcess("cibrsh.exe");
	//Eingabefilename
	String t_inputFileName = new String("Test.rtf");
	//Ausgabefilename
	String t_uniqueID = ""+System.currentTimeMillis();
	String t_outputFile = t_uniqueID+".pdf";
	//Property für das Arbeitsverzeichnis im CIB-Format
	//(z.B. für IncludePicture-Anweisungen) setzen 
	String t_Workspace = new String("c:\\test\\");
	cibRunShell.addProperty("WorkSpace", t_Workspace);
	//IniFile mit dem Kommando -i setzen
	cibRunShell.addCommand("-i", t_Workspace+"cibrsh.ini");
	//Kommando -f für die PDF-Konvertierung und Eingabe- sowie 	//Ausgabefilenamen setzen
	cibRunShell.addCommand(RunshellProcess.COMMAND_PDF,
	t_inputFileName, t_outputFile);
	try {
		//PDF-Konvertierung ausführen
		cibRunShell.executeAndWait(new File(t_Workspace));
	}
	catch(Exception ex) {
		System.out.println("Bei der Konvertierung mit CIB format/pdf "+
		"ist eine Exception aufgetreten.");
		return false;
	}
	//Fehlerbehandlung der Runshell
	int error = cibRunShell.getExitCode();
	if (error != 0) {
		System.out.println("CIB format/pdf-Fehler: " + error + 
		"bei der Ausführung von " + cibRunShell.getCommandLine() + 
		";");
		return false;
	}
	return true;
}

5.14. JCoMod Wrapper-Beispiel für CIB runshell: Aufruf der nativen CIB runshell aus Java für einen CIB merge-Mischlauf

package de.cib.sample.comod;
import de.cib.comod.RunshellProcess;
import java.io.File;
import java.io.IOException;

boolean doMergeRunshellProcess() {

		// neuen Runshell-Prozess starten
		String t_Workspace = new String("\home\user\");
		// cibrshux ist die CIB runshell unter Linux/Unix
		RunshellProcess runshell = new RunshellProcess("./bin/cibrshux");
		runshell.addArgument(RunshellProcess.COMMAND_MERGE+"a./templates");
		runshell.addArgument(RunshellProcess.COMMAND_MERGE+"q./Data");
		runshell.addArgument(RunshellProcess.COMMAND_MERGE+"'l!merge.log'");
		runshell.addArgument(RunshellProcess.COMMAND_MERGE+"iTest.rtf");
		runshell.addArgument(RunshellProcess.COMMAND_MERGE +"'o!output.rtf'");
		runshell.addArgument(RunshellProcess.COMMAND_MERGE+"s");
		runshell.addArgument(RunshellProcess.COMMAND_MERGE+"-old-compare");
		runshell.addArgument(RunshellProcess.COMMAND_MERGE+"dTest.csv");
		runshell.addArgument(RunshellProcess.COMMAND_MERGE+"@1");
		try
		{
			// Pfad zu den Libraries angeben und Prozess starten
			runshell.executeAndWait(new File(t_Workspace));
		}
		catch(IOException io)
		{
			System.out.println("Beim Mischen mit CIB merge "+
			"ist eine Exception aufgetreten.");
			return false;
		}
		catch(InterruptedException inter)
		{
			System.out.println("Beim Mischen mit CIB merge "+
			"ist eine Exception aufgetreten.");
			return false;
		}
	// Fehlerbehandlung der CIB runshell
	int error = cibRunShell.getExitCode();
	if (error != 0) {
		System.out.println("CIB merge-Fehler: " + error + 
		"bei der Ausführung von " + cibRunShell.getCommandLine() + 
		";");
		return false;
	}
	return true;
}

5.15. JCoMod Wrapper-Beispiel für CIB runshell: Synchroner Aufruf der nativen CIB runshell aus Java für einen CIB postscript-Auftrag

package com.cib.comod.test;

String cmd = new String("cibrshux FontWorkSpace=./Fonts/ PpdFilename=./ppd/hp4050_6.ppd LicenseCompany=... LicenseKey=... -sp ./InputFile.rtf");
            Runtime rt = Runtime.getRuntime();
            System.out.println("Executing " + cmd);
            Process proc = rt.exec(cmd);
            // any error??? and synchronize!
            int exitVal = proc.waitFor();
            System.out.println("ExitValue: " + exitVal); 

5.16. JCoMod Wrapper-Beispiel für CIB runshell: Synchroner Aufruf der nativen CIB runshell aus Java für einen CIB postscript-Auftrag mit niedriger Prozesspriorität

package com.cib.comod.test;

String cmd = new String("cibrshux FontWorkSpace=./Fonts/ PpdFilename=./ppd/hp4050_6.ppd LicenseCompany=... LicenseKey=... –z-2 -sp ./InputFile.rtf");
            Runtime rt = Runtime.getRuntime();
            System.out.println("Executing " + cmd);
            Process proc = rt.exec(cmd);
            // any error??? and synchronize!
            int exitVal = proc.waitFor();
            System.out.println("ExitValue: " + exitVal); 

6. Lieferumfang

Der JCoMod-Wrapper umfasst folgende Bestandteile:

JCoMod-Jobklassen die in Form eines JAR-Archives ausgeliefert werden.

JNI-Verbindung zu den CIB office Modulen die plattformabhängig in Form einer DLL oder shared library (Unixsysteme) ausgeliefert werden.

Komponente

Softwareumfang

 

JCoMod Wrapper

ComodJobs.jar      // jar-Archiv JCoMod Jobs

libcibjcomod.so     // JCoMod (JNI) shared library für Unix-Systeme

libcibjcomod.su     // JCoMod (JNI) shared library für HP Unix-Systeme

Jcomod.dll // JCoMod (JNI) dynamic link library für Windows, OS/2