SAP Java Connector - Example 3: Create Salesorder

来源:互联网 发布:linux db2教程 编辑:程序博客网 时间:2024/06/15 03:20
 

SAP Java Connector - Example 3: Create Salesorder

 

This example shows how to make a sales order using the SAP java Connector and BAPI_SALESORDER_CREATEFROMDAT2. First the ABAP code for using the BAPI is shown, and next the Java implementation is shown.

ABAP Example
Java Example

 

ABAP Example

REPORT z_bapi_create_sales_order_test .* Order header:* - Order type: OR  Important you must use the german code TA* - Sales org: 1000* - Distrb. chan.: 10* - Division: 00** - Sold to party: 1032* - Ship to party: 1032* - Purch order: DG-19970626-3** Order item:* - Material: P-100* - Qty: 1DATA:* Order partners li_order_partners    TYPE STANDARD TABLE OF bapiparnr, l_order_partners     LIKE bapiparnr,* Structures for order header l_order_header_in    LIKE bapisdhd1, l_order_header_inx   LIKE bapisdhd1x,* Tables for order items li_order_items_in    TYPE STANDARD TABLE OF bapisditm, l_order_items_in     LIKE bapisditm, li_order_items_inx   TYPE STANDARD TABLE OF bapisditmx, l_order_items_inx    LIKE bapisditmx,* Return table from bapi call li_return TYPE STANDARD TABLE OF bapiret2, l_return  TYPE bapiret2,* Sales document number  l_vbeln LIKE bapivbeln-vbeln,* Error flag  l_errflag(1) TYPE c.START-OF-SELECTION.*------------------------------------------------------------------* Build partner information*------------------------------------------------------------------  CLEAR l_order_partners.  l_order_partners-partn_role = 'AG'.          "Remember German codes !  l_order_partners-partn_numb = '0000001032'.  APPEND l_order_partners TO li_order_partners.*------------------------------------------------------------------* Build order header*------------------------------------------------------------------* Update flag  l_order_header_inx-updateflag = 'I'.* Sales document type  l_order_header_in-doc_type    = 'TA'.        "Remember German codes !  l_order_header_inx-doc_type   = 'X'.* Sales organization  l_order_header_in-sales_org  = '1000'.  l_order_header_inx-sales_org  = 'X'.* Distribution channel  l_order_header_in-distr_chan = '10'.  l_order_header_inx-distr_chan = 'X'.* Division  l_order_header_in-division = '00'.  l_order_header_inx-division = 'X'.* Purchase order  l_order_header_in-purch_no_c = 'DG-19970626-300'.  l_order_header_inx-purch_no_c = 'X'.*------------------------------------------------------------------* Build order item(s) - Only 1 is used in this example *------------------------------------------------------------------  l_order_items_in-itm_number = '10'.  l_order_items_inx-itm_number = '10'.  l_order_items_in-material = 'P-100'.  l_order_items_inx-material = 'X'.  l_order_items_in-comp_quant = '1.000'.  l_order_items_inx-comp_quant = 'X'.  APPEND l_order_items_in TO li_order_items_in.  l_order_items_inx-updateflag = 'I'.  APPEND l_order_items_inx TO li_order_items_inx.*------------------------------------------------------------------* CALL Bapi*------------------------------------------------------------------  CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'       EXPORTING            order_header_in  = l_order_header_in            order_header_inx = l_order_header_inx            testrun          = 'X'       IMPORTING            salesdocument    = l_vbeln       TABLES            return           = li_return            order_items_in   = li_order_items_in            order_items_inx  = li_order_items_inx            order_partners   = li_order_partners.END-OF-SELECTION.*------------------------------------------------------------------* Check and write Return table*------------------------------------------------------------------  CLEAR l_errflag.  WRITE: / 'Sales dcoument: ', l_vbeln.  LOOP AT li_return INTO l_return.    WRITE: / l_return-type, l_return-message(50).    IF l_return-type = 'E'.      l_errflag = 'X'.    ENDIF.  ENDLOOP.*------------------------------------------------------------------* No errors - Commit*------------------------------------------------------------------  IF l_errflag  IS INITIAL.    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.  ENDIF.

Java Example

This example e3monstartes how to create a salesorder using BAPI_SALESORDER_CREATEFROMDAT2 and how to read the status inmformation of an existing sales order using BAPI_SALESORDER_GETSTATUS.

The example conists of the following classes:

Run Main method
MainScreen The main screen for the application, containing the menus for exiting the applikation, loggin on- and off to SAP, create salesorder and view salesorder status
LogonScreen Logon pad for logon to SAP. Also has a method to handle logoff. The actual logon i carried out using the Connect method of the SapConnection class
SapConnection Contains code for loggin on to SAP. The class has no user interface. The user interface is provided by the LogonScreen class. The class creates a public static connection object mConnection. As the connection object is static, the same connection will be used for all instances of the class. That means that if a connection has / been made onece, all other classes that uases an instance of SapConnection, will have access to the same connection.
CreateOrder User interface for creating a new sales order. Orders are created using class JcoCreateSalesorderFromDat2.
JcoCreateSalesorderFromDat2 Code for creating a new sales order. The class has no userinterface. The user interface is provided by class CreateOrder. The class calls BAPI_SALESORDER_CREATEFROMDAT2 and BAPI_TRANSACTION_COMMIT.
ViewOrder User interface for viewing the status information of a sales order.
JcoBapiSalesorderGetStatus Code for viewing the status information of a sales order. The class has no user interface. The user interface is procied by class ViewOrder. The cklass calls BAPI_SALESORDER_GETSTATUS

 

CLASS Run

//**************************************************************************// Contains the Main method//**************************************************************************public class Run{ public static void main(String[] args)  { MainScreen mainscreen1 = new MainScreen();    mainscreen1.show();  }}

CLASS MainScreen

The main screen for the application, containing the menus for exiting the applikation, loggin on- and off to SAP, create salesorder and view salesorder status.

 

import java.awt.*;import javax.swing.*;import java.awt.event.*;import javax.swing.BorderFactory;import javax.swing.border.Border;public class MainScreen extends JFrame{  //---------------------------------------------------------------  //Class level variables  //---------------------------------------------------------------  //Menus  private JMenu FileMenu;  private JMenu SalesOrderMenu;  private Border loweredbevel;  private JLabel statusLabel;  private SapConnection sapConnection;  private LogonScreen logonscreen1; //------------------------------------------------------------------  // Constructor class //------------------------------------------------------------------  public MainScreen()  { //---------------------------------------------------------------    //Set frame properties    //---------------------------------------------------------------    setSize(700,600);    setTitle("Sales orders");    // Exit applikation when using the Close button    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   //---------------------------------------------------------------   // Center screen   //---------------------------------------------------------------    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();    Dimension frameSize = this.getSize();    if (frameSize.height > screenSize.height) {      frameSize.height = screenSize.height;    }    if (frameSize.width > screenSize.width) {      frameSize.width = screenSize.width;    }    this.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);    Container myPane = getContentPane();   //---------------------------------------------------------------   // Add menus   //---------------------------------------------------------------   //Actions   Action LogOn = new MenuActions("Logon","LOGON");   Action LogOff = new MenuActions("Logoff","LOGOFF");   Action exitApp = new MenuActions("Exit","EXIT_APP");   Action CreateOrder = new MenuActions("Create salesorder","CREATE_ORDER");   Action ViewOrder = new MenuActions("View order status","VIEW_ORDER");   // File menu   FileMenu = new JMenu("File");   FileMenu.add(LogOn);   FileMenu.add(LogOff);   FileMenu.add(exitApp);   // Sales order menu   SalesOrderMenu  = new JMenu("Sales order");   SalesOrderMenu.add(CreateOrder);   SalesOrderMenu.add(ViewOrder);   //Implement menu bar   JMenuBar MenuBar = new JMenuBar();   MenuBar.add(FileMenu);   MenuBar.add(SalesOrderMenu);   setJMenuBar(MenuBar);   //Create status label with lowered border   loweredbevel = BorderFactory.createLoweredBevelBorder();   statusLabel = new JLabel("Status: Logged off");   statusLabel.setBorder(loweredbevel);   myPane.add(statusLabel,"South");   //Initialize Logoon screen class   logonscreen1 = new LogonScreen(this);   sapConnection = new SapConnection();  } //  public MainScreen() //--------------------------------------------------------------- // CLASS MenuActions -  Private class to handle menu actions //---------------------------------------------------------------  class MenuActions extends AbstractAction  {    public MenuActions(String p_name,String p_Action)    { putValue(Action.NAME, p_name);      putValue("myAction", p_Action);    }    public void actionPerformed(ActionEvent evt)    { String actionType = (String)getValue("myAction");     if ( actionType == "EXIT_APP" )       System.exit(0);     else if ( actionType == "LOGON" )        SapLogon();     else if ( actionType == "LOGOFF" )        SapLogoff();     else if ( actionType == "CREATE_ORDER" )        CreateOrder();     else if ( actionType == "VIEW_ORDER" )        ViewOrder();    }  } //--------------------------------------------------------------- // Private method SapLogon - Logon to SAP, shows the LogonScreen //---------------------------------------------------------------  private void SapLogon()  { logonscreen1.show();    if ( sapConnection.mConnection == null )      { statusLabel.setText("Status: Logged off"); }    else      { statusLabel.setText("Status: Logged on");  }  } //--------------------------------------------------------------- // Private method SapLogoff - Calls the SapLogoff method of the // LogonScreen class //---------------------------------------------------------------  private void SapLogoff()  { logonscreen1.SapLogoff();    if ( sapConnection.mConnection == null )      { statusLabel.setText("Status: Logged off"); }    else      { statusLabel.setText("Status: Logged on");  }  } //--------------------------------------------------------------- // Private method CreateOrder - Calls the CreateOrder screen //---------------------------------------------------------------  private void CreateOrder()  { CreateOrder createOrder = new CreateOrder(this);    createOrder.show();  } //--------------------------------------------------------------- // Private method ViewOrder - Calls the ViewOrder screen //---------------------------------------------------------------  private void ViewOrder()  { ViewOrder viewOrder = new ViewOrder(this);    viewOrder.show();  }}  //END public class MainScreen extends JFrame

CLASS LogonScreen

Logon pad for logon to SAP. Also has a method to handle logoff. The actual logon i carried out using the Connect method of the SapConnection class.

 

import java.awt.*;import javax.swing.*;import java.awt.event.*;import com.sap.mw.jco.*;  //The JCOpublic class LogonScreen extends JDialog{ private JTextField textClient; private JTextField textUser; private JTextField textPw; private JTextField textLangu; private JTextField textHost; private JTextField textSystem; private SapConnection sapConnection;  public LogonScreen(JFrame parent)   {     super(parent, "Logon to SAP",true);    //---------------------------------------------------------------    //Set frame properties    //---------------------------------------------------------------    setSize(400,400);    setTitle("Logon to SAP");    setLocation(225,155);   //---------------------------------------------------------------   // Center screen   //---------------------------------------------------------------    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();    Dimension frameSize = this.getSize();    if (frameSize.height > screenSize.height) {      frameSize.height = screenSize.height;    }    if (frameSize.width > screenSize.width) {      frameSize.width = screenSize.width;    }    this.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);    Container myContentPane = getContentPane();   //---------------------------------------------------------------   // Create buttons   //---------------------------------------------------------------    JPanel buttonPanel = new JPanel();    JButton cancel = new JButton("Cancel");    JButton logOn = new JButton("Logon");    buttonPanel.add(logOn);    buttonPanel.add(cancel);    myContentPane.add(buttonPanel, "South");  //---------------------------------------------------------------  // Create labels and text fields  //---------------------------------------------------------------   Box vBox = Box.createVerticalBox();   JLabel labelClient = new JLabel("Client: ");   textClient = new JTextField("800",3);   JLabel labelUser = new JLabel("User: ");   textUser = new JTextField("WMHEFRN");   JLabel labelPw = new JLabel("Password: ");   textPw = new JTextField("sluppert3");   JLabel labelLangu = new JLabel("Language: ");   textLangu = new JTextField("EN");   JLabel labelHost = new JLabel("Host: ");   textHost = new JTextField("172.29.80.207");   JLabel labelSystem = new JLabel("System: ");   textSystem = new JTextField("00");   vBox.add(Box.createVerticalStrut(40));   vBox.add(labelClient);   vBox.add(textClient);   vBox.add(labelUser);   vBox.add(textUser);   vBox.add(labelPw);   vBox.add(textPw);   vBox.add(labelLangu);   vBox.add(textLangu);   vBox.add(labelHost);   vBox.add(textHost);   vBox.add(labelSystem);   vBox.add(textSystem);   vBox.add(Box.createVerticalStrut(40));   myContentPane.add(vBox, "Center");   //---------------------------------------------------------------   // Action listeners   //---------------------------------------------------------------    cancel.addActionListener(new ActionListener()      { public void actionPerformed(ActionEvent evt)        { setVisible(false);        }      } );    logOn.addActionListener(new ActionListener()      { public void actionPerformed(ActionEvent evt)        { sapLogon(textClient.getText(),                   textUser.getText(),                   textPw.getText(),                   textLangu.getText(),                   textHost.getText(),                   textSystem.getText()          );        }      } );   } //END public LogonScreen()   //---------------------------------------------------------------   // Private Method sapLogon - Logs on to SAP   //---------------------------------------------------------------   private void sapLogon(String client,                         String User,                         String Pw,                         String Langu,                         String Host,                         String System)   { Exception sapException = null;    sapConnection = new SapConnection();    sapException = sapConnection.Connect(client,    //SAP client                                         User,      //User ID                                         Pw,        //Password                                         Langu,     //Language                                         Host,      //Host                                         System);   //System    if ( sapException == null )    { JOptionPane.showMessageDialog(this, "Logon ok");      this.hide();    }    else    { JOptionPane.showMessageDialog(this,sapException);    }    } //END method   //---------------------------------------------------------------   // Public Method sapLogoff - Logs off from SAP   //---------------------------------------------------------------    public void SapLogoff()    {  if (sapConnection.mConnection == null)       { JOptionPane.showMessageDialog(this, "You was not logged on"); }       else       { try         { sapConnection.mConnection.disconnect();           sapConnection.mConnection = null;           JOptionPane.showMessageDialog(this, "Logged off");         }         catch (Exception ex)         {JOptionPane.showMessageDialog(this,ex);}       } // END try     } //END method } //END public LogonScreen(JFrame parent)

 

CLASS SapConnection

Contains code for loggin on to SAP. The class has no user interface. The user interface is provided by the LogonScreen class. The class creates a public static connection object mConnection. As the connection object is static, the same connection will be used for all instances of the class. That means that if a connection has / been made onece, all other classes that uases an instance of SapConnection, will have access to the same connection.

import com.sap.mw.jco.*;  //The JCOpublic class SapConnection{ public static JCO.Client mConnection = null;  public SapConnection()  {  }  public Exception Connect(String client,                           String User,                           String Pw,                           String Langu,                           String Host,                           String System)   { try     { mConnection = JCO.createClient(client,    //SAP client                                      User,      //User ID                                      Pw,        //Password                                      Langu,     //Language                                      Host,      //Host                                      System);   //System        mConnection.connect();        return null;      }   catch (Exception ex)      {mConnection = null;       return ex;      }   }}

 

CLASS CreateOrder

User interface for creating a new sales order. Orders are created using class JcoCreateSalesorderFromDat2.

 

import java.awt.*;import javax.swing.*;import javax.swing.table.*;import java.awt.event.*;import java.util.*;public class CreateOrder extends JDialog{ //Screen fields  private JTextField txtDocType;  private JTextField txtPartnerNumber;  private JTextField txtSalesOrg;  private JTextField txtDistrChn;  private JTextField txtDiv;  private JTextField txtPurchOrd;  private JTextArea  txtStatusField;  private JList bapiReturnList;  // Object for table data  private Object[][] itemData;  //Vector to hold return vaklues from the BAPI  private Vector bapiReturn = new Vector(0);  public CreateOrder(JFrame parent)  { super(parent, "Create sales Order",true);    //---------------------------------------------------------------    //Set frame properties    //---------------------------------------------------------------    setSize(700,600);    setTitle("Create Sales Order");   //---------------------------------------------------------------   // Center screen   //---------------------------------------------------------------    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();    Dimension frameSize = this.getSize();    if (frameSize.height > screenSize.height) {      frameSize.height = screenSize.height;    }    if (frameSize.width > screenSize.width) {      frameSize.width = screenSize.width;    }    this.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);    Container myContentPane = getContentPane();   //---------------------------------------------------------------   // Create buttons   //---------------------------------------------------------------    JPanel buttonPanel = new JPanel();    JButton createButton = new JButton("Create");    JButton cancelButton = new JButton("Cancel");    buttonPanel.add(createButton);    buttonPanel.add(cancelButton);    myContentPane.add(buttonPanel, "South");   //---------------------------------------------------------------   // Screen fields - Textfields and labels   //---------------------------------------------------------------    JLabel lblDocType = new JLabel("Order type:  ");    lblDocType.setAlignmentX(0);    txtDocType = new JTextField("TA");    txtDocType.setMaximumSize(new Dimension(50,Short.MAX_VALUE));    txtDocType.setAlignmentX(0);    JLabel lblPartnerNumber = new JLabel("Sold to party:");    lblPartnerNumber.setAlignmentX(0);    txtPartnerNumber = new JTextField("0000001032");    txtPartnerNumber.setMaximumSize(new Dimension(160,Short.MAX_VALUE));    txtPartnerNumber.setAlignmentX(0);    JLabel lblSalesOrg = new JLabel("Sales org.:");    lblSalesOrg.setAlignmentX(0);    txtSalesOrg = new JTextField("1000");    txtSalesOrg.setMaximumSize(new Dimension(75,Short.MAX_VALUE));    txtSalesOrg.setAlignmentX(0);    JLabel lblDistrChn = new JLabel("Distribution channel:");    lblDistrChn.setAlignmentX(0);    txtDistrChn = new JTextField("10");    txtDistrChn.setMaximumSize(new Dimension(40,Short.MAX_VALUE));    txtDistrChn.setAlignmentX(0);    JLabel lblDiv = new JLabel("Division: ");    lblDiv.setAlignmentX(0);    txtDiv = new JTextField("00");    txtDiv.setMaximumSize(new Dimension(40,Short.MAX_VALUE));    txtDiv.setAlignmentX(0);    JLabel lblPurchOrd = new JLabel("Purchase order:");    lblPurchOrd.setAlignmentX(0);    txtPurchOrd = new JTextField("DG-19970626-300");    txtPurchOrd.setMaximumSize(new Dimension(400,Short.MAX_VALUE));    txtPurchOrd.setAlignmentX(0);   //---------------------------------------------------------------   // Screen layout   //---------------------------------------------------------------    JPanel centerPanel = new JPanel();    Box vBox = Box.createVerticalBox();    vBox.add(lblDocType);    vBox.add(txtDocType);    vBox.add(Box.createRigidArea(new Dimension(0,10)));    vBox.add(lblPartnerNumber);    vBox.add(txtPartnerNumber);    vBox.add(Box.createRigidArea(new Dimension(0,10)));    vBox.add(lblSalesOrg);    vBox.add(txtSalesOrg);    vBox.add(Box.createRigidArea(new Dimension(0,10)));    vBox.add(lblDistrChn);    vBox.add(txtDistrChn);    vBox.add(Box.createRigidArea(new Dimension(0,10)));    vBox.add(lblDiv);    vBox.add(txtDiv);    vBox.add(Box.createRigidArea(new Dimension(0,10)));    vBox.add(lblPurchOrd);    vBox.add(txtPurchOrd);    //Filler box    Dimension minSize = new Dimension(5, 30);    Dimension prefSize = new Dimension(5, 30);    Dimension maxSize = new Dimension(Short.MAX_VALUE, 30);    vBox.add(new Box.Filler(minSize, prefSize, maxSize));   //---------------------------------------------------------------   // Create table   //---------------------------------------------------------------   TableModel myModel = new itemTableModel();   JTable itemTable = new JTable(myModel);   //Create scroll pane and add table   JScrollPane myScrollPane = new JScrollPane(itemTable);   //Setting initial column width of the first column   TableColumn column = null;   column = itemTable.getColumnModel().getColumn(0);   column.setMaxWidth(30);   //Setting the table size   itemTable.setPreferredScrollableViewportSize(new Dimension(500,100));   vBox.add(myScrollPane);   //---------------------------------------------------------------   // Create List box to hold Bapi return valkues   //---------------------------------------------------------------   bapiReturnList = new JList();   JScrollPane bapireturnScrollPane = new JScrollPane(bapiReturnList);   vBox.add(Box.createRigidArea(new Dimension(0,5)));   vBox.add(bapireturnScrollPane);   //---------------------------------------------------------------   // Putting it all together   //---------------------------------------------------------------   centerPanel.add(vBox);   myContentPane.add(centerPanel,"Center");   //---------------------------------------------------------------   // Create a default item in the table   //---------------------------------------------------------------   itemData = new Object[3][10];   itemData[0][0] = "10";   itemData[1][0] = "P-100";   itemData[2][0] = "1.000";   //---------------------------------------------------------------   // Action listeners for buttons   //---------------------------------------------------------------    cancelButton.addActionListener(new ActionListener()      { public void actionPerformed(ActionEvent evt)        { setVisible(false);        }      } );    createButton.addActionListener(new ActionListener()      { public void actionPerformed(ActionEvent evt)        {createSalesOrder();        }      } );  } //END - public CreateOrder(JFrame parent)   //---------------------------------------------------------------   // CLASS ItemTable - TABLE MODEL   //---------------------------------------------------------------   class itemTableModel extends AbstractTableModel   {    // Column headers    String[] columnNames = {"Item", "Material", "Quantity"};    // Set number of columns in the table = 3    public int getColumnCount() {        return 3;    }    // Set number of rows in the table    public int getRowCount() {       return 5;    }    public String getColumnName(int col) {        return columnNames[col];    }    // Set value of a cell    public Object getValueAt(int row, int col) {        return itemData[col][row];    }     // Which cells are editable.     // It is only necessary to implement this method     // if the table is editable      public boolean isCellEditable(int row, int col)      { return true; //All cells are editable      }      // Update cell after it has been edited.      public void setValueAt(Object value, int row, int col)      { itemData[col][row] = value;        fireTableCellUpdated(row, col);      }   }   //---------------------------------------------------------------   // METHOD CreateSalesOrder - Create the salesorder using   // class JcoCreateSalesorderFromDat2   //---------------------------------------------------------------   private void createSalesOrder()  {  String SalesDocument;     try      { JcoCreateSalesorderFromDat2 jcoCreateSalesorder = new JcoCreateSalesorderFromDat2();        SalesDocument = jcoCreateSalesorder.jcoCreate( txtPartnerNumber.getText(),                                                       txtDocType.getText(),                                                       txtSalesOrg.getText(),                                                       txtDistrChn.getText(),                                                       txtDiv.getText(),                                                       txtPurchOrd.getText(),                                                       itemData,                                                       bapiReturn );        bapiReturnList.setListData(bapiReturn);        JOptionPane.showMessageDialog(this, "Sales document " + SalesDocument + " created");      }      catch (Exception mException)      { JOptionPane.showMessageDialog(this, mException);      }  } // END - private void createSalesOrder()} //END - public class CreateOrder extends JDialog

 

CLASS JcoCreateSalesorderFromDat2

Code for creating a new sales order. The class has no userinterface. The user interface is provided by class CreateOrder. The class calls BAPI_SALESORDER_CREATEFROMDAT2 and BAPI_TRANSACTION_COMMIT.

import com.sap.mw.jco.*;  //The JCOimport java.awt.*;import javax.swing.*;import java.util.*;public class JcoCreateSalesorderFromDat2 {  private SapConnection sapConnection1;  private IRepository mRepository;  private JCO.Function jcoFunction;  private JCO.Function jcoCommit; //******************************************************************* // CONSTRUCTOR //******************************************************************* public JcoCreateSalesorderFromDat2()  {    sapConnection1 = new SapConnection();  } //******************************************************************* // CLASS jcoCreate - Creates sales order //*******************************************************************  public String jcoCreate( String PartnerNumber,                           String DocType,                           String SalesOrg,                           String DistrChan,                           String Division,                           String PurchOrder,                           Object [][] itemData,                           Vector bapiReturn)                         throws RepositoryNotCreatedException,                                FunctionNotCreatedException,                                InvalidParameterException,                                ExecuteException,                                FunctionCommitNotCreatedException,                                ExecuteCommitException  {   //---------------------------------------------------------   // Create metadata with JCO Repository   //---------------------------------------------------------    try     { mRepository = new JCO.Repository("hFrank",sapConnection1.mConnection); }    catch (Exception mException)     { throw new RepositoryNotCreatedException(); }   //---------------------------------------------------------   // Get a function template for BAPI_SALESORDER_CREATEFROMDAT2   // from the repository and create a function   //---------------------------------------------------------    try     { // Get a function template from the repository       IFunctionTemplate ftemplate = mRepository.getFunctionTemplate("BAPI_SALESORDER_CREATEFROMDAT2");       // Create a function from the template       jcoFunction = new JCO.Function(ftemplate);       if ( jcoFunction == null )         throw new FunctionNotCreatedException();     }    catch (Exception mException)     { throw new FunctionNotCreatedException(); }   //---------------------------------------------------------   // Set import parameters   //---------------------------------------------------------   try     {      //Partner information - Note that this is a table parameter      JCO.Table ORDER_PARTNERS = jcoFunction.getTableParameterList().getTable("ORDER_PARTNERS");      ORDER_PARTNERS.appendRow();      ORDER_PARTNERS.setValue("AG","PARTN_ROLE");      ORDER_PARTNERS.setValue(PartnerNumber,"PARTN_NUMB");      // ORDER_HEADER_INX - Structure parameter      JCO.Structure order_header_inx =           jcoFunction.getImportParameterList().getStructure("ORDER_HEADER_INX");      order_header_inx.setValue("I","UPDATEFLAG");      order_header_inx.setValue("X","DOC_TYPE");      order_header_inx.setValue("X","SALES_ORG");      order_header_inx.setValue("X","DISTR_CHAN");      order_header_inx.setValue("X","DIVISION");      order_header_inx.setValue("X","PURCH_NO_C");     //ORDER_HEADER_IN - Structure parameter     JCO.Structure order_header_in =           jcoFunction.getImportParameterList().getStructure("ORDER_HEADER_IN");      order_header_in.setValue(DocType,"DOC_TYPE");      order_header_in.setValue(SalesOrg,"SALES_ORG");      order_header_in.setValue(DistrChan,"DISTR_CHAN");      order_header_in.setValue(Division,"DIVISION");      order_header_in.setValue(PurchOrder,"PURCH_NO_C");     // Item data - Table parameter.      JCO.Table ORDER_ITEMS_INX = jcoFunction.getTableParameterList().getTable("ORDER_ITEMS_INX");      JCO.Table ORDER_ITEMS_IN = jcoFunction.getTableParameterList().getTable("ORDER_ITEMS_IN");     for ( int i = 0; i <= itemData.length; i++)       { if (itemData[0][i] != null)          { ORDER_ITEMS_INX.appendRow();            ORDER_ITEMS_IN.appendRow();            ORDER_ITEMS_INX.setValue(itemData[0][i],"ITM_NUMBER");            ORDER_ITEMS_IN.setValue(itemData[0][i],"ITM_NUMBER");            ORDER_ITEMS_INX.setValue("X","MATERIAL");            ORDER_ITEMS_IN.setValue(itemData[1][i],"MATERIAL");            ORDER_ITEMS_INX.setValue("X","COMP_QUANT");            ORDER_ITEMS_IN.setValue(itemData[2][i],"COMP_QUANT");            ORDER_ITEMS_INX.setValue("X","UPDATEFLAG");          }       }     }    catch (Exception mException)     {  mException.printStackTrace();        throw new InvalidParameterException();     }   //---------------------------------------------------------   // Execute function   //---------------------------------------------------------    try     { sapConnection1.mConnection.execute(jcoFunction);     }    catch (Exception mException)     { mException.printStackTrace();       throw new ExecuteException();     }    //---------------------------------------------------------    // Commit    //---------------------------------------------------------    try     { // Get a function template from the repository       IFunctionTemplate ftemplate = mRepository.getFunctionTemplate("BAPI_TRANSACTION_COMMIT");       // Create a function from the template       jcoCommit = new JCO.Function(ftemplate);       if ( jcoCommit == null )         throw new FunctionNotCreatedException();     }    catch (Exception mException)     { throw new FunctionCommitNotCreatedException(); }   // Execute COMMIT    try     { sapConnection1.mConnection.execute(jcoCommit);     }    catch (Exception mException)     { mException.printStackTrace();       throw new ExecuteCommitException();     }   //---------------------------------------------------------   // Handle return data   //---------------------------------------------------------   // Return    JCO.Table jcoReturn = jcoFunction.getTableParameterList().getTable("RETURN");    for (int i = 0; i < jcoReturn.getNumRows(); i++)    { jcoReturn.setRow(i);      String Message = jcoReturn.getField("TYPE").getValue() + " " +                        jcoReturn.getField("MESSAGE").getValue();      bapiReturn.setSize(i + 1);      bapiReturn.setElementAt(new String(Message),i );    }   // Sales document number   JCO.Field SalesDocumentField = jcoFunction.getExportParameterList().getField("SALESDOCUMENT");   String SalesDocumentString = SalesDocumentField.getValue().toString();   return SalesDocumentString;  } // END - public void jcoCreate()  //*******************************************************************  // Exception classes  //*******************************************************************  class RepositoryNotCreatedException extends Exception  { public RepositoryNotCreatedException()    { super("Repository object could not be created");  }  }  class FunctionNotCreatedException extends Exception  { public FunctionNotCreatedException()    { super("Function could not be created");  }  }  class FunctionCommitNotCreatedException extends Exception  { public FunctionCommitNotCreatedException()    { super("Function COMMIT could not be created");  }  }  class InvalidParameterException extends Exception  { public InvalidParameterException()    { super("Invalid parameter");  }  }  class ExecuteException extends Exception  { public ExecuteException()    { super("Execution failed");  }  }  class ExecuteCommitException extends Exception  { public ExecuteCommitException()    { super("Execution of commit failed");  }  }}

CLASS ViewOrder

User interface for viewing the status information of a sales order.

 

 

import java.awt.*;import javax.swing.*;import java.awt.event.*;import javax.swing.table.*;import java.util.*;public class ViewOrder extends JDialog{ private JTextField txtFindDoc; // sales document number  private JLabel txtDocDate;    // Document date  private JLabel txtPurchNo;    // Purchase order number  private JLabel txtReqdateH;   // Requested delivery date  private JLabel txtDlvStatH;   // Delivery block (document header)  private JLabel txtBapiReturn; // Bapi return infor field  private JTable itemTable;  private Object[][] itemData;  public ViewOrder(JFrame parent)  { super(parent, "View sales order",true);   //---------------------------------------------------------------   // Size and Center screen   //---------------------------------------------------------------    setSize(700,600);    setTitle("View Sales Order");    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();    Dimension frameSize = this.getSize();    if (frameSize.height > screenSize.height) {      frameSize.height = screenSize.height;    }    if (frameSize.width > screenSize.width) {      frameSize.width = screenSize.width;    }    this.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);    Container myContentPane = getContentPane();   //---------------------------------------------------------------   // Add View and Exit buttons at the buttom of the screen   //---------------------------------------------------------------    JPanel buttonPanel = new JPanel();    JButton exitButton = new JButton("Exit");    buttonPanel.add(exitButton);    myContentPane.add(buttonPanel,"South");   //---------------------------------------------------------------   // Add search order field + button   //---------------------------------------------------------------    JLabel lblFindDoc = new JLabel("Order number: ");    txtFindDoc = new JTextField("0000006973");    txtFindDoc.setMaximumSize(new Dimension(90,Short.MAX_VALUE));    JButton viewButton = new JButton("View");    viewButton.setMaximumSize(new Dimension(80,Short.MAX_VALUE));    Box hBox1 = Box.createHorizontalBox();    hBox1.add(Box.createRigidArea(new Dimension(200,0)));    hBox1.add(lblFindDoc);    hBox1.add(Box.createRigidArea(new Dimension(10,0)));    hBox1.add(txtFindDoc);    hBox1.add(Box.createRigidArea(new Dimension(10,0)));    hBox1.add(viewButton);    hBox1.add(Box.createRigidArea(new Dimension(200,0)));    myContentPane.add(hBox1,"North");   //---------------------------------------------------------------   // Add Order header fields   //---------------------------------------------------------------   //---- Document date   Box hBox2 = Box.createHorizontalBox();   JLabel lblDocDate = new JLabel("Document date:  ");   lblDocDate.setMaximumSize(new Dimension(150,Short.MAX_VALUE));   lblDocDate.setAlignmentX(0);   hBox2.add(lblDocDate);   txtDocDate = new JLabel();   txtDocDate.setMaximumSize(new Dimension(150,Short.MAX_VALUE));   txtDocDate.setAlignmentX(0);   txtDocDate.setBorder(BorderFactory.createLoweredBevelBorder());   hBox2.add(txtDocDate);   //--- Purchase order number   Box hBox3 = Box.createHorizontalBox();   JLabel lblPurchNo = new JLabel("Purchase order number:  ");   lblPurchNo.setMaximumSize(new Dimension(150,Short.MAX_VALUE));   lblPurchNo.setAlignmentX(0);   hBox3.add(lblPurchNo);   txtPurchNo = new JLabel();   txtPurchNo.setMaximumSize(new Dimension(150,Short.MAX_VALUE));   txtPurchNo.setAlignmentX(100);   txtPurchNo.setBorder(BorderFactory.createLoweredBevelBorder());   hBox3.add(txtPurchNo);   //--- Requested delivery date   Box hBox4 = Box.createHorizontalBox();   JLabel lblReqdateH = new JLabel("Requested delivery date:");   lblReqdateH.setMaximumSize(new Dimension(150,Short.MAX_VALUE));   lblReqdateH.setAlignmentX(0);   hBox4.add(lblReqdateH);   txtReqdateH = new JLabel();   txtReqdateH.setMaximumSize(new Dimension(150,Short.MAX_VALUE));   txtReqdateH.setAlignmentX(0);   txtReqdateH.setBorder(BorderFactory.createLoweredBevelBorder());   hBox4.add(txtReqdateH);   //--- Delivery block (document header)   Box hBox5 = Box.createHorizontalBox();   JLabel lblDlvStatH = new JLabel("Delivery block:     ");   lblDlvStatH.setMaximumSize(new Dimension(280,Short.MAX_VALUE));   lblDlvStatH.setAlignmentX(0);   hBox5.add(lblDlvStatH);   txtDlvStatH = new JLabel();   txtDlvStatH.setMaximumSize(new Dimension(20,Short.MAX_VALUE));   txtDlvStatH.setAlignmentX(0);   txtDlvStatH.setBorder(BorderFactory.createLoweredBevelBorder());   hBox5.add(txtDlvStatH);   Box vBox1 = Box.createVerticalBox();
   //Filler box   Dimension minSize = new Dimension(5, 30);   Dimension prefSize = new Dimension(5, 30);   Dimension maxSize = new Dimension(Short.MAX_VALUE, 30);   vBox1.add(new Box.Filler(minSize, prefSize, maxSize));   vBox1.add(hBox2);   vBox1.add(Box.createRigidArea(new Dimension(0,10)));   vBox1.add(hBox3);   vBox1.add(Box.createRigidArea(new Dimension(0,10)));   vBox1.add(hBox4);   vBox1.add(Box.createRigidArea(new Dimension(0,10)));   vBox1.add(hBox5);   vBox1.add(Box.createRigidArea(new Dimension(0,10)));   vBox1.add(new Box.Filler(minSize, prefSize, maxSize));   JLabel lblItems = new JLabel("Order items:              ");   lblItems.setMaximumSize(new Dimension(200,Short.MAX_VALUE));   lblItems.setAlignmentX(0);   vBox1.add(lblItems);   //---------------------------------------------------------------   // Create table   //---------------------------------------------------------------   itemData = new Object[6][50];   itemData[0][0] = "";   TableModel myModel = new itemTableModel();   itemTable = new JTable(myModel);   //Create scroll pane and add table   JScrollPane myScrollPane = new JScrollPane(itemTable);   //Setting initial column width   TableColumn column = null;   column = itemTable.getColumnModel().getColumn(0);   column.setPreferredWidth(50);   column = itemTable.getColumnModel().getColumn(1);   column.setPreferredWidth(110);   column = itemTable.getColumnModel().getColumn(2);   column.setPreferredWidth(250);   column = itemTable.getColumnModel().getColumn(3);   column.setPreferredWidth(75);   column = itemTable.getColumnModel().getColumn(4);   column.setPreferredWidth(75);   column = itemTable.getColumnModel().getColumn(5);   column.setPreferredWidth(30);   //Setting the table size   itemTable.setPreferredScrollableViewportSize(new Dimension(650,100));   vBox1.add(myScrollPane);   //---------------------------------------------------------------   // BAPI return info field   //---------------------------------------------------------------   vBox1.add(new Box.Filler(minSize, prefSize, maxSize));   JLabel lblBapiReturn = new JLabel("Return info from BAPI: ");   vBox1.add(lblBapiReturn);   Box vBox2 = Box.createHorizontalBox();   txtBapiReturn = new JLabel(" ");   txtBapiReturn.setMaximumSize(new Dimension(800,Short.MAX_VALUE));   txtBapiReturn.setAlignmentX(0);   txtBapiReturn.setBorder(BorderFactory.createLoweredBevelBorder());   vBox2.add(txtBapiReturn);   vBox1.add(vBox2);   //---------------------------------------------------------------   //  Build it all together   //---------------------------------------------------------------   JPanel centerPanel = new JPanel();   centerPanel.add(vBox1);   myContentPane.add(centerPanel,"Center");   //---------------------------------------------------------------   // Action listeners for buttons   //---------------------------------------------------------------    exitButton.addActionListener(new ActionListener()      { public void actionPerformed(ActionEvent evt)        { setVisible(false);        }      } );   viewButton.addActionListener(new ActionListener()      { public void actionPerformed(ActionEvent evt)        { viewSalesOrder();        }      } );  }  //---------------------------------------------------------------  // METHOD  - viewSalesOrder  //---------------------------------------------------------------   private void viewSalesOrder()   { String DocDate = null;     String BapiReturn = null;     JcoBapiSalesorderGetStatus getOrderStatus = new JcoBapiSalesorderGetStatus();     try       { // Find order         getOrderStatus.GetStatus(txtFindDoc.getText());         // Get header info         txtDocDate.setText(getOrderStatus.getDocDate());         txtPurchNo.setText(getOrderStatus.getPurchNo());         txtReqdateH.setText(getOrderStatus.getReqDateH());         txtDlvStatH.setText(getOrderStatus.getDlvBlock());         // Get item data         int numItems = getOrderStatus.getNumItems();    //Number of items         String [][] itemArray = getOrderStatus.getItems();         for (int row = 0; row < itemArray.length; row++)           { for (int col = 0; col < 6; col++)                itemData[col][row] = itemArray[row][col];           }         // Get BapiReturn         txtBapiReturn.setText(getOrderStatus.getBapiReturn());       }      catch (Exception mException)      { JOptionPane.showMessageDialog(this, mException);      }   }   //---------------------------------------------------------------   // CLASS ItemTable - TABLE MODEL   //---------------------------------------------------------------   class itemTableModel extends AbstractTableModel   {    String[] columnNames = {"Item", "Material", "Description",                            "Quantity","Net value","Curr"};    // Set number of columns in the table    // = Number of column names    public int getColumnCount() {        //return columnNames.length;        return 6;    }    // Set number of rows in the table    public int getRowCount() {      return 50;    }    public String getColumnName(int col) {        return columnNames[col];    }    // Set value of a cell    public Object getValueAt(int row, int col) {       return itemData[col][row];    }    // No editable cells    public boolean isCellEditable(int row, int col)      { return false;      }    // Update cell after it has been edited.    public void setValueAt(Object value, int row, int col)      { itemData[row][col] = value;      }   }}

CLASS JcoBapiSalesorderGetStatus

Code for viewing the status information of a sales order. The class has no user interface. The user interface is procied by class ViewOrder. The cklass calls BAPI_SALESORDER_GETSTATUS

import com.sap.mw.jco.*;  //The JCOimport java.util.*;import java.text.*;public class JcoBapiSalesorderGetStatus{ private SapConnection sapConnection1;  private IRepository mRepository;  private JCO.Function jcoFunction;  // Return parameters  private String oDocDate;  private String oPurchNo;  private String oReqDateH;  private String oDlvBlock;  private String oBapiReturn;  private String[][] itemData;  public JcoBapiSalesorderGetStatus()  { sapConnection1 = new SapConnection();  }  public void GetStatus ( String iSalesDocument )              throws SalesDocumentEmptyException,                     RepositoryNotCreatedException,                     FunctionNotCreatedException,                     InvalidInputParameterException,                     ExecuteException,                     GetStatusException,                     BapiReturnException  { // Date format used for date fields    DateFormat dateFormatter;    Locale dkLocale = new Locale("dk","DK");    dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT,dkLocale);    
    // Salesdocument number is empty    if (iSalesDocument.length() == 0)      throw new SalesDocumentEmptyException();   //---------------------------------------------------------   // Create metadata with JCO Repository   //---------------------------------------------------------    try     { mRepository = new JCO.Repository("hFrank",sapConnection1.mConnection); }    catch (Exception mException)     { //mException.printStackTrace();       throw new RepositoryNotCreatedException();      }   //---------------------------------------------------------   // Get a function template for BAPI_SALESORDER_GETSTATUS   // from the repository and create a function   //---------------------------------------------------------    try     { // Get a function template from the repository       IFunctionTemplate ftemplate = mRepository.getFunctionTemplate("BAPI_SALESORDER_GETSTATUS");       // Create a function from the template       jcoFunction = new JCO.Function(ftemplate);       if ( jcoFunction == null )         throw new FunctionNotCreatedException();     }    catch (Exception mException)     { //mException.printStackTrace();       throw new FunctionNotCreatedException();     }   //---------------------------------------------------------   // Set the SALESDOCUMENT import parameter   //---------------------------------------------------------   try     { JCO.Field SalesDocumentField = jcoFunction.getImportParameterList().getField("SALESDOCUMENT");     SalesDocumentField.setValue(iSalesDocument);     }   catch (Exception mException)     { throw new InvalidInputParameterException();     }   //---------------------------------------------------------   // Execute function   //---------------------------------------------------------    try     { sapConnection1.mConnection.execute(jcoFunction);     }    catch (Exception mException)     { //mException.printStackTrace();       throw new ExecuteException();     }   //---------------------------------------------------------   // Get sales order status. Item info is saved in the   // array itemData.   //---------------------------------------------------------   try     { JCO.Table jcoStatusInfo = jcoFunction.getTableParameterList().getTable("STATUSINFO");       int NumRows = jcoStatusInfo.getNumRows();       // Array dimension 2 (Columns):       //  0 : ITM_NUMBER  Item number       //  1 : MATERIAL    Material number       //  2 : SHORT_TEXT  Short text for sales order item       //  3 : REQ_QTY     Cumulative order quantity in sales units       //  4 : NET_VALUE   Net value of the order item in document currency       //  5 : CURRENCY    SD document currency       itemData = new String[NumRows][6];       for (int i=0; i < NumRows; i++)         { jcoStatusInfo.setRow(i);           // These fields are header fields and it is only necessary to           // read info for the first item           if ( i == 0 )             { oDocDate = dateFormatter.format(jcoStatusInfo.getField("DOC_DATE").getDate());               oPurchNo = jcoStatusInfo.getField("PURCH_NO").getValue().toString();               oReqDateH = dateFormatter.format(jcoStatusInfo.getField("REQ_DATE_H").getDate());               oDlvBlock = jcoStatusInfo.getField("DLV_BLOCK").getValue().toString();             }           // Item data           itemData[i][0] = jcoStatusInfo.getField("ITM_NUMBER").getValue().toString();           itemData[i][1] = jcoStatusInfo.getField("MATERIAL").getValue().toString();           itemData[i][2] = jcoStatusInfo.getField("SHORT_TEXT").getValue().toString();           itemData[i][3] = jcoStatusInfo.getField("REQ_QTY").getValue().toString();           itemData[i][4] = jcoStatusInfo.getField("NET_VALUE").getValue().toString();           itemData[i][5] = jcoStatusInfo.getField("CURRENCY").getValue().toString();         }     }   catch (Exception mException)      { throw new GetStatusException();      }   //---------------------------------------------------------   // Get BAPIRETURN   //---------------------------------------------------------   try     { JCO.Structure jcoBapiReturn = jcoFunction.getExportParameterList().getStructure("RETURN");       oBapiReturn = jcoBapiReturn.getField("TYPE").getValue() + " " +                     jcoBapiReturn.getField("MESSAGE").getValue();     }   catch (Exception mException)     { throw new BapiReturnException();     }  }  //*******************************************************************  // Classes that returns status information  //*******************************************************************  public String getDocDate()    { return oDocDate; }  public String getPurchNo()    { return oPurchNo; }  public String getReqDateH()      { return oReqDateH; }  public String getDlvBlock()    { return oDlvBlock; }  public String getBapiReturn()    { return oBapiReturn; }    public String[][] getItems()    { return itemData;    }  public int getNumItems()    { return itemData.length;    }  //*******************************************************************  // Exception classes  //*******************************************************************  class SalesDocumentEmptyException extends Exception  { public SalesDocumentEmptyException()    { super("You must enter a sales document");  }  }  class RepositoryNotCreatedException extends Exception  { public RepositoryNotCreatedException()    { super("Repository object could not be created");  }  }  class FunctionNotCreatedException extends Exception  { public FunctionNotCreatedException()    { super("Function could not be created");  }  }  class InvalidInputParameterException extends Exception  { public InvalidInputParameterException()    { super("Invalid parameter");  }  }  class ExecuteException extends Exception  { public ExecuteException()    { super("Execution failed");  }  }  class GetStatusException extends Exception  { public GetStatusException()    { super("Error when reading status information");  }  }  class BapiReturnException extends Exception  { public BapiReturnException()    { super("Error whern reading BAPI return information");  }  }}
原创粉丝点击