Das folgende Beispielprojekt beschreibt den Einsatz des SAP JCo in einem Geschätsszenario, das den Kunden eines Unternehmens die Möglichkeit bietet, Ihre Rechnungen online aus dem SAP-Lieferantensystem abzurufen und anzuzeigen.
Die Daten der Kunden-Lieferungen sind im SAP-System des Lieferanten gespeichert, die Kundenrechnungen selbst hingegen in einem Dokumentenmanagement-System. Im Dokumentenmanagement-System werden die Belege über die Dokument-ID selektiert, die im SAP-System zusammen mit der Rechnungsnummer gespeichert ist. Das Szenario muß also einmal die Kundendaten im SAP-System finden und zum anderen eine Verbindung zum Dokumentenmanagement-System herstellen, um die angeforderte Rechnung zu erhalten.
· Die Entwicklungsplatform ist Java
· es werden Enterprise JavaBeans (EJB) verwendet
· jede weitere Installation auf SAP-Seite soll vermieden werden
· die Transaktionssteuerung in SAP soll über BAPIs erfolgen
· die Lösung soll platformunabhängig sein.
· das Projekt soll in kurzer Zeit realisierbar sein
Im Allgemeinen können Standard-BAPIs verwendet werden. In diesem Szenario wird jedoch ein neues Objekt entwickelt: Z_BAPI_GET_DOCUMENT_ID .
Business Object |
BAPI |
Beschreibung |
Z_BAPI_GET_DOCUMENT_ID |
GETDOCUMENT |
Holt die Dokument-ID |
|
|
Input: Buchungskreis, |
|
|
Rechnungsnummer, |
|
|
Geschäftsjahr |
|
|
Output: Dokument-ID |
|
GETAPPENDIX |
Holt die Dokument-Appendix-ID |
|
|
Input: Buchungskreis, |
|
|
Rechnungsnummer, |
|
|
Geschäftsjahr |
|
|
Output: Dokument-Appendix-ID |
Um dieses Objekt anzusprechen wurde ein SessionBean implementiert. Das Bean beinhaltet die Methode getDocid(), die die IDs wie in Abb.3 bechrieben zurücksendet.
/** * Getting Document-ID, Document-Appendix-ID from SAP/R3 by invoice number * @return Document-ID */ public String getDocid() { String sDocid = ""; JCO.Client jcoConnection = null; IRepository repository = null;
// getting properties try { String sClient = vrb.getString("client",""); // client String sUserid = vrb.getString("userid",""); // userid String sPassword = vrb.getString("password",""); // password String sLanguage = vrb.getString("language",""); // language String sHost = vrb.getString("host",""); // host String sSysnr = vrb.getString("sysnr",""); // system number String sBukrs = vrb.getString("buchungskreis",""); // account number String rgID = "";
// SAP-login jcoConnection = JCO.createClient(sClient,sUserid,sPassword,sLanguage,sHost,sSysnr); jcoConnection.connect();
// building repository repository = new JCO.Repository("ASG", jcoConnection);
// executing BAPI // Document JCO.Function bapiDocument = repository. getFunctionTemplate("Z_BAPI_TOA02_GETDOCUMENT").getFunction(); if (bapiDocument != null) { jcoConnection.execute(bapiDocument); JCO.ParameterList input = bapiDocument.getImportParameterList(); input.setValue(sBukrs,"BUKRS"); // accounting area input.setValue(sBelnr,"BELNR"); // invoice number input.setValue(sGjahr,"GJAHR"); // financial year
jcoConnection.execute(bapiDocument); JCO.ParameterList output = bapiDocument.getExportParameterList(); if (output != null) { JCO.Structure structure = output.getStructure("DOCUMENT"); sDocid = structure.getString("DOC_ID"); sArchivid = structure.getString("ARCHIV_ID"); } }
// Appendix if (!sDocid.equals("")) { JCO.Function bapiAppendix = repository. getFunctionTemplate("Z_BAPI_TOA02_GETAPPENDIX").getFunction(); if (bapiAppendix != null) { jcoConnection.execute(bapiAppendix);
// Input Parameter JCO.ParameterList input = bapiAppendix.getImportParameterList(); input.setValue(sBukrs,"BUKRS"); // accounting area input.setValue(sBelnr,"BELNR"); // invoice number input.setValue(sGjahr,"GJAHR"); // financial year
jcoConnection.execute(bapiAppendix); JCO.ParameterList output = bapiAppendix.getTableParameterList(); JCO.Table table = output.getTable(0);
if (table != null) { if (table.getNumRows() > 0) { do { for (JCO.FieldIterator e = table.fields(); e.hasMoreElements(); ) { JCO.Field field = e.nextField(); if (field.getName().equals("ARCHIV_ID")) sAnlagearchivid = field.getString(); else if (field.getName().equals("DOC_ID")) sAnlagedocid = field.getString(); } } while(table.nextRow()); } } } } } catch (Exception e) { e.printStackTrace(); } finally { if (jcoConnection != null) jcoConnection.disconnect(); }
this.sDocid = sDocid;
return sDocid; } // ---------------------------------------------------------------------------------- |