Creating purchase orders using SAP Java Connector (JCo)

Proper use of this tip expects the user to at least understand Core Java.

The SAP Java Connector is a midleware that allows us to communicate with SAP system using JAVA applications. The example included is of client-side programming, i.e. Java to SAP call. Here a Java application has been developed using Frame (a class in Java); this application uses classes in JCo to call a BAPI to create purchase order in the SAP system.

I have not included many validations in the application, but neverthless, I guess this source code will prove to be an ice-breaker for you guys as far as using JCo is concerned.

Note: Obviously, you need to have JCo class files in your class path!

import com.sap.mw.jco.*;
import java.util.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class BAPITip extends Frame implements ActionListener
	//Global Declarations
	int i = 0;
	char flag = 'a';
	Label doc_type,co_code,purch_org,pur_group,vendor;
	Label po_item,pur_mat,plant,unit,net_price,deliv_date,quantity;
	Panel pan_hdr,pan_itm,pan_bs,pan_st;
	Button bt = null,bc = null,br = null,bd = null;
	TextArea  status = null;
	JCO.Client mConnection = null;
	JCO.Pool pool = null;
	static final String POOL_NAME

    Requires Free Membership to View

= "MyPool"; static JCO.Repository mRepository; String msg = ""; public BAPITip() { setLocation(0,0); setSize(800,800); setVisible(true); bt = new Button("Submit"); bc = new Button("Connect"); br = new Button("Reset"); bd = new Button("Disconnect"); bt.addActionListener(this); bc.addActionListener(this); br.addActionListener(this); bd.addActionListener(this); status = new TextArea("Status",4,30); status.setEditable(false); //Instantiating header labels doc_type = new Label("Document Type"); co_code = new Label("Company Code"); purch_org = new Label("Purchasing Organization"); pur_group = new Label("Purchasing Group"); vendor = new Label("Vendor"); //Instantiating line item labels po_item = new Label(" Item number"); pur_mat = new Label(" Material"); plant = new Label(" Plant"); unit = new Label(" Unit"); net_price = new Label(" Net price"); deliv_date = new Label(" Delivery date"); quantity = new Label(" Quantity"); //Instantiating header text fields DOC_TYPE = new TextField(); CO_CODE = new TextField(); PURCH_ORG = new TextField(); PUR_GROUP = new TextField(); VENDOR = new TextField(); //Instantiating line item textfields PO_ITEM = new TextField[5]; PUR_MAT = new TextField[5]; PLANT = new TextField[5]; UNIT = new TextField[5]; NET_PRICE = new TextField[5]; DELIV_DATE = new TextField[5]; QUANTITY = new TextField[5]; //Instantiating panels pan_hdr = new Panel(); pan_itm = new Panel(); //Setting layout for applet and adding component-panels to applet setLayout(new GridLayout(4,1)); //Setting layout for header panel and adding components GridLayout gl1 = new GridLayout(5,2); pan_hdr.setLayout(gl1); pan_hdr.add(doc_type); pan_hdr.add(DOC_TYPE); pan_hdr.add(co_code); pan_hdr.add(CO_CODE); pan_hdr.add(purch_org); pan_hdr.add(PURCH_ORG); pan_hdr.add(pur_group); pan_hdr.add(PUR_GROUP); pan_hdr.add(vendor); pan_hdr.add(VENDOR); add(pan_hdr); //Setting layout for line item panel and adding components GridLayout gl2 = new GridLayout(7,7); pan_itm.setLayout(gl2); pan_itm.add(po_item); pan_itm.add(pur_mat); pan_itm.add(plant); pan_itm.add(unit); pan_itm.add(net_price); pan_itm.add(deliv_date); pan_itm.add(quantity); for(i = 0; i < 5; i++) { PO_ITEM[i] = new TextField(); PUR_MAT[i] = new TextField(); PLANT[i] = new TextField(); UNIT[i] = new TextField(); NET_PRICE[i] = new TextField(); DELIV_DATE[i] = new TextField(); QUANTITY[i] = new TextField(); pan_itm.add(PO_ITEM[i]); pan_itm.add(PUR_MAT[i]); pan_itm.add(PLANT[i]); pan_itm.add(UNIT[i]); pan_itm.add(NET_PRICE[i]); pan_itm.add(DELIV_DATE[i]); pan_itm.add(QUANTITY[i]); } pan_itm.add(bc); pan_itm.add(bt); pan_itm.add(br); pan_itm.add(bd); add(pan_itm); add(status); } public void actionPerformed(ActionEvent ae) { msg = ""; if (ae.getSource() == bt) this.submitToSAP(); else if (ae.getSource() == bc) this.connectDirectToSAP(); else if (ae.getSource() == br) this.resetValues(); else if (ae.getSource() == bd) this.disconnectFromSAP(); } private void connectDirectToSAP() { // Change the logon information to your own system/user mConnection = JCO.createClient("210", // SAP client "DEV07", // userid "dra", // password "EN", // language (null for the default language) "", // application server host name "00"); // system number try { mConnection.connect(); msg = "Connection successfully established"; this.setStatus(); System.out.println("Connection successfully established"); } catch (Exception ex) { msg = ex.getMessage(); this.setStatus(); System.exit(1); } } private void resetValues() { DOC_TYPE.setText(""); PURCH_ORG.setText(""); PUR_GROUP.setText(""); CO_CODE.setText(""); VENDOR.setText(""); status.setText(""); for (int i = 0; i < 5; i++) { PO_ITEM[i].setText(""); PUR_MAT[i].setText(""); PLANT[i].setText(""); UNIT[i].setText(""); NET_PRICE[i].setText(""); DELIV_DATE[i].setText(""); QUANTITY[i].setText(""); } } private void submitToSAP() { msg = "Please wait..."; this.setStatus(); System.out.println("Please wait..."); //creation of Repository object and object for the BAPI if(mConnection == null) { msg = "Please conect first to the SAP system"; this.setStatus(); System.out.println(msg); //System.exit(0); } mRepository = new JCO.Repository("ARAsoft", mConnection); JCO.Function function = null; function = BAPITip.createFunction("BAPI_PO_CREATE"); //setting the import parameters JCO.Structure PO_HDR = function.getImportParameterList() .getStructure("PO_HEADER"); JCO.Table PO_LITEMS = function.getTableParameterList().getTable("PO_ITEMS"); JCO.Table PO_ITM_SCH = function.getTableParameterList().getTable("PO_ITEM_SCHEDULES"); PO_HDR.setValue(DOC_TYPE.getText(),"DOC_TYPE"); PO_HDR.setValue(CO_CODE.getText(),"CO_CODE"); PO_HDR.setValue(PURCH_ORG.getText(),"PURCH_ORG"); PO_HDR.setValue(PUR_GROUP.getText(),"PUR_GROUP"); PO_HDR.setValue(VENDOR.getText(),"VENDOR"); for(int i = 0; i < 5; i++) { ; if (PO_ITEM[i].getText() != "") { PO_LITEMS.appendRow(); PO_LITEMS.setValue(PO_ITEM[i].getText(),"PO_ITEM"); PO_LITEMS.setValue(PUR_MAT[i].getText(),"PUR_MAT"); PO_LITEMS.setValue(PLANT[i].getText(),"PLANT"); PO_LITEMS.setValue(UNIT[i].getText(),"UNIT"); PO_LITEMS.setValue(NET_PRICE[i].getText(),"NET_PRICE"); PO_ITM_SCH.appendRow(); PO_ITM_SCH.setValue(PO_ITEM[i].getText(),"PO_ITEM"); PO_ITM_SCH.setValue(new Date(),"DELIV_DATE"); PO_ITM_SCH.setValue(QUANTITY[i].getText(),"QUANTITY"); } } //executing the BAPI mConnection.execute(function); //accessing export parameters JCO.Table returnTable = function.getTableParameterList().getTable("RETURN"); if(returnTable.getNumRows() != 0) { for (int i = 0; i < returnTable.getNumRows(); i++) { returnTable.setRow(i); if (! (returnTable.getString("TYPE").equals("") || returnTable.getString("TYPE").equals("S") || returnTable.getString("TYPE").equals("W")) ) { if (i == 0) status.setText(""); msg = returnTable.getString("MESSAGE"); System.out.println(returnTable.getString("MESSAGE")); } } } String PO_NUM = function.getExportParameterList(). getString("PURCHASEORDER"); if (PO_NUM != null) { flag = 'a'; msg = "Purchase order " + PO_NUM + " created successfully!"; this.setStatus(); System.out.println(msg); } } private void disconnectFromSAP() { mConnection.disconnect(); msg = "Disconnected from SAP system..."; this.setStatus(); System.out.println("Disconnected from SAP system..."); } public static JCO.Function createFunction(String name) { IFunctionTemplate ft = mRepository.getFunctionTemplate(name.toUpperCase()); if (ft == null) return null; return ft.getFunction(); } private void setStatus() { status.setText(""); status.setText(msg); } private void appendStatus() { status.append(" " + msg); } public static void main(String args[]) { BAPITip fb = new BAPITip(); }

This was first published in May 2002

There are Comments. Add yours.

TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.