CIB JCoMod technischer Leitfaden (DE)
Site: | CIB eLearning |
Course: | CIB JCoMod |
Book: | CIB JCoMod technischer Leitfaden (DE) |
Printed by: | Guest user |
Date: | Thursday, 30 January 2025, 7:03 PM |
Table of contents
- 1. Einführung
- 2. JCoMod-Wrapper
- 3. Serverszenarien im Vergleich
- 4. Clientszenarien
- 5. Schneller Einstieg
- 5.1. JCoMod Wrapper-Beispiel für CIB format: Job zum Auswerten von RTF Feldinformationen über einen Analyse-Callback
- 5.2. JCoMod Wrapper-Beispiel für CIB merge: Job zum Einmischen von CSV-Daten in RTF-Dokumente
- 5.3. JCoMod Wrapper-Beispiel für CIB format: Job zum Umwandeln eines RTF-Dokuments in ein PDF-Dokument
- 5.4. JCoMod Wrapper-Beispiel für die CIB pdf toolbox: Job zum direkten Druck eines PDF-Dokumentes
- 5.5. JCoMod Wrapper-Beispiel für CIB view: Job zum Anzeigen eines RTF-Dokuments und Versenden als PDF-Attachment
- 5.6. JCoMod Wrapper-Beispiel für CIB view: Job zum Anzeigen eines RTF-Dokuments in einem modal gestarteten Cib View
- 5.7. JCoMod Wrapper-Beispiel für CIB dialog browser: Job zum Anzeigen und Bearbeiten einer HTML-Seite mit Regelwerk und CSV-Dateien
- 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
- 5.9. JCoMod Wrapper-Beispiel für CIB mail: Job zum (Batch-)Versand eines Dokuments über CIB mail (nur Win32/MAPI)
- 5.10. JCoMod Wrapper-Beispiel für CIB format/postscript: Job zum Drucken eines RTF-Dokuments als Postscript
- 5.11. JCoMod Wrapper-Beispiel für CIB rec: Nutzung als Editcontrol in einer Java-Eingabemaske
- 5.12. JCoMod Wrapper-Beispiel für CIB job: JCibjobjob zur konvertierung eines RTFs zu einer PDF-Ausgabe
- 5.13. JCoMod Wrapper-Beispiel für CIB runshell: Aufruf der nativen CIB runshell aus Java mit Inifile für eine CIB pdf-Konvertierung
- 5.14. JCoMod Wrapper-Beispiel für CIB runshell: Aufruf der nativen CIB runshell aus Java für einen CIB merge-Mischlauf
- 5.15. JCoMod Wrapper-Beispiel für CIB runshell: Synchroner Aufruf der nativen CIB runshell aus Java für einen CIB postscript-Auftrag
- 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
- 6. Lieferumfang
1. Einführung
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.
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.
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:
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".
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".
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 |