Membangun Integrasi Data SAP RFC dengan JAVA
Data integrations is connecting the dots

“Data is a precious thing and will last longer than the systems themselves.”
— Tim Berners-Lee, inventor of the World Wide Web.
Membangun sebuah system yang terintegrasi dengan SAP merupakan hal yang gampang-gampang susah, mulai dari mempersiapkan infrastruktur pendukung hingga menganalisa performa aplikasi yang terintegrasi dengan SAP.
dalam kesempatan kali ini saya akan mencoba membangun sebuah integrasi data SAP dengan Java menggunakan Library SAPJCO untuk librarinya bisa di download pada link berikut, dengan SAP R/3 System, SAPJCO versi 3.0.18 dan dengan operating system Windows 7.
1. Download SAPJCO pada website resmi SAP
Langkah pertama adalah mendownload library sapjco kemudian Extract dan letakkan pada directory C:\sapjco dan tambahkan PATH C:\sapjco pada Environment Variables.
2. Membuat File Connection
Membuat file connection yang nanti akan dipanggil pada program seperti berikut :
jco.client.lang=EN
jco.client.client=320
jco.client.sysnr=00
jco.client.ashost=192.168.1.1
jco.client.user=userdev
jco.client.passwd=*************************
copy string di atas kemudian paste ke Notepad kemudian simpan dengan extension .jcoDestination sehingga akan menjadi seperti berikut :{namafile}.jcoDestination.
3. Setting Library to IDE
Saya menggunakan IDE Netbeans 8 untuk masukkan library sapjco lakukan langkah sebagai berikut :



4. Let’s Begin to Code
Import library yang akan digunakan pada java code seperti berikut :
package javarfc_connection;import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoFunction;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;
import com.sap.conn.jco.AbapException;
import com.sap.conn.jco.JCoField;
import com.sap.conn.jco.JCoTable;
import com.sap.conn.jco.JCoRecordFieldIterator;
import com.sap.conn.jco.JCoStructure;
import java.util.*;
Berikut full source codenya :
public class JavaRFC_Connection {private static String ABAP_AS = "ABAP_AS";private static void eshtablishing() {try {
JCoDestination destination = JCoDestinationManager.getDestination(ABAP_AS);BufferedReader br = null;
try {
String sCurrentLine;
sCurrentLine = "STFC_CONNECTION";
JCoFunction function = destination.getRepository().getFunction(sCurrentLine);
if (function == null) {
throw new RuntimeException("RFC Enabled Function Module " + sCurrentLine + " not found in SAP.");
}function.getImportParameterList().setValue("REQUTEXT", "I am Rey");try {
function.execute(destination);
} catch (AbapException e) {
System.out.println("Error:" + e.getMessage());
return;
}
Iterator<JCoField> iterator = function.getExportParameterList().iterator();
String exportParams = "";
String structoutput = "";
String exportTableParams = "";
int newlineflag = 0;
while (iterator.hasNext()) {
JCoField field = iterator.next();
if (!field.getTypeAsString().equals("STRUCTURE")) {
exportParams = exportParams + field.getName() + "\n" + field.getTypeAsString() + "\n" + field.getValue().toString() + "\n";
} else if (field.getTypeAsString().equals("STRUCTURE")) {
JCoStructure exportStructure = function.getExportParameterList().getStructure(field.getName());
structoutput = structoutput + field.getName() + "\n";
for (int i = 0; i < exportStructure.getMetaData().getFieldCount(); i++) {
structoutput = structoutput + exportStructure.getMetaData().getName(i) + "\n" + exportStructure.getString(i) + "\n";
}
structoutput = structoutput + "END;\n";
}
}
exportParams = exportParams + "END;\n";
if (function.getTableParameterList() != null) {
Iterator<JCoField> iteratorTable = function.getTableParameterList().iterator();
while (iteratorTable.hasNext()) {
JCoField field = iteratorTable.next();
JCoTable codes = function.getTableParameterList().getTable(field.getName());
exportTableParams = exportTableParams + field.getName() + "\n";
JCoRecordFieldIterator iterator1 = codes.getRecordFieldIterator();
while (iterator1.hasNextField()) {
JCoField fieldtab = iterator1.nextField();
exportTableParams = exportTableParams + fieldtab.getName() + "\n";
}
exportTableParams = exportTableParams + "ENDMETADATA;\n";
for (int i = 0; i < codes.getNumRows(); i++) {
codes.setRow(i);
JCoRecordFieldIterator iterator2 = codes.getRecordFieldIterator();
while (iterator2.hasNextField()) {
JCoField fieldval = iterator2.nextField();
exportTableParams = exportTableParams + fieldval.getValue().toString() + "\n";
}
}
exportTableParams = exportTableParams + "END;\n";
}
}
File fileExport = new File("exportParameters.txt");
FileOutputStream fopExport = new FileOutputStream(fileExport);
System.out.println(exportParams);
// try {
// byte[] exportParameters = exportParams.getBytes();
// fopExport.write(exportParameters);
// fopExport.flush();
// fopExport.close();
// } catch (IOException e) {
// System.out.println("Error from Java : " + e.getMessage());
// }
File fileStructExport = new File("exportStructParameters.txt");
FileOutputStream fopStructExport = new FileOutputStream(fileStructExport);
try {
byte[] exportStructParameters = structoutput.getBytes();
fopStructExport.write(exportStructParameters);
fopStructExport.flush();
fopStructExport.close();
} catch (IOException e) {
System.out.println("Error from Java : " + e.getMessage());
}
File fileTable = new File("exportTableParams.txt");
FileOutputStream foptabExport = new FileOutputStream(fileTable);
try {
byte[] exportTabParameters = exportTableParams.getBytes();
foptabExport.write(exportTabParameters);
foptabExport.flush();
foptabExport.close();
} catch (IOException e) {
System.out.println("Error from Java : " + e.getMessage());
}
} catch (IOException e) {
System.out.println("Error from Java : " + e.getMessage());
}
String content = "success";
System.out.println(content);} catch (JCoException e) {
String content = e.getMessage();
System.out.println("Error : " + content);}}public static void main(String[] args) {
eshtablishing();
}
}
Pembahasan :
JCoDestination destination = JCoDestinationManager.getDestination(ABAP_AS);- digunakan untuk membuka koneksi ke SAP menggunakan file config
{namafile}.jcoDestination.Dalam kasus ini file confignya bernamaABAP_AS.jcoDestination.
destination.getRepository().getFunction("STFC_CONNECTION");- digunakan untuk memanggil (FM) Fuction Modul, STFC_CONNECTION merupakan nama FM pada SAP.
function.getImportParameterList().setValue("REQUTEXT", "I'm Rey");
- Digunakan untuk parsing parameter kepada SAP FM, dalam kasus ini FM"
STFC_CONNECTIONmemiliki variable ImportREQUTEXTyang diisi dengan stringI'm Rey.
function.execute(destination);- Function untuk melakukan eksekusi proses.
Iterator<JCoField> iterator = function.getExportParameterList().iterator();- Function untuk menangkap Respons atau retun value dari SAP.
5. Hasil Akhir
jika sudah benar maka hasil dari eksekusinya adalah sebagai berikut :

Sekian tutorial dari saya, semoga bermanfaat dan bisa diimplementasikan dengan baik.
Mohon maaf jika ada yang kurang berkenan dan salah kata.
— Terima Kasih.
