现在的位置: 首页 > 综合 > 正文

Java连SAP

2013年12月13日 ⁄ 综合 ⁄ 共 8656字 ⁄ 字号 评论关闭

参考:http://www.cnblogs.com/cfas/p/3141468.html

1、连接SAP服务器

import java.io.File; 
import java.io.FileOutputStream; 
import java.util.Properties; 
 
import com.sap.conn.jco.JCoDestination; 
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException; 
import com.sap.conn.jco.ext.DestinationDataProvider; 
 
public class ConnectSAPServer { 
    static String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL"; 
    static{ 
        Properties connectProperties = new Properties(); 
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "192.168.0.1");  
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "00");        
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "450");       
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "a0001");  
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "123456");     
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "en");        
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");  
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT,"10");     
     
        createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties); 
    } 
     
    static void createDataFile(String name, String suffix, Properties properties){ 
        File cfg = new File(name+"."+suffix); 
        if(!cfg.exists()){ 
            try{ 
                FileOutputStream fos = new FileOutputStream(cfg, false); 
                properties.store(fos, "for tests only !"); 
                fos.close(); 
            }catch (Exception e){ 
                throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e); 
            } 
        } 
    } 
 
    public static JCoDestination Connect(){ 
        JCoDestination destination =null;    
        try { 
            destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED); 
        } catch (JCoException e) { 
            //e.getCause(); 
        e.printStackTrace();
        }      
        return destination; 
    } 

2、

public class SalesOrder { 
    private String vkorg; 
    private String vtweg; 
    private String spart; 
    private String vbeln;
    private String posnr;
    private String kunnr;
    private String matnr;
     
    public SalesOrder(){} 
     
    public SalesOrder(String vkorg,String vtweg,String spart, String vbeln, 
    String posnr, String kunnr, String matnr){ 
        this.vkorg = vkorg; 
        this.vtweg = vtweg; 
        this.spart = spart;
        this.vbeln = vbeln;
        this.posnr = posnr;
        this.kunnr = kunnr;
        this.matnr = matnr;
    } 
 
    public String getVkorg() { 
        return vkorg; 
    } 
 
    public void setVkorg(String vkorg) { 
        this.vkorg = vkorg; 
    } 
 
    public String getVtweg() { 
        return vtweg; 
    } 
 
    public void setVtweg(String vtweg) { 
        this.vtweg = vtweg; 
    } 
 
    public String getSpart() { 
        return spart; 
    } 
 
    public void setSpart(String spart) { 
        this.spart = spart; 
    } 
    
    public String getVbeln() { 
        return vbeln; 
    } 
 
    public void setVbeln(String vbeln) { 
        this.vbeln = vbeln; 
    } 
    
    public String getPosnr() { 
        return posnr; 
    } 
 
    public void setPosnr(String posnr) { 
        this.posnr = posnr; 
    } 
    
    public String getKunnr() { 
        return kunnr; 
    } 
 
    public void setKunnr(String kunnr) { 
        this.kunnr = kunnr; 
    } 
    public String getMatnr() { 
        return matnr; 
    } 
 
    public void setMatnr(String matnr) { 
        this.matnr = matnr; 
    } 

3、

import javax.swing.table.AbstractTableModel;

public class SoTableModel extends AbstractTableModel{
private static final long serialVersionUID = 1L;  
public String[] colNames;
    private Object[][] stockdata = null;

    public SoTableModel(String[] tableTitle, Object[][] tabledata){
    colNames = tableTitle;
    stockdata = tabledata;
    }
    public int getColumnCount() {  
        return colNames.length;  
    }  
    public int getRowCount() { 
        return stockdata.length;  
    }  
    public String getColumnName(int col) {
        return colNames[col];
      }
    public void setValueAt(Object value, int row, int col){
    Integer num = null;
        if ((String) value != null || !String.valueOf(value).equals("")) {
            stockdata[row][col] = value;
            this.fireTableDataChanged();
          }
    }
    // 从list中拿出rowIndex行columnIndex列显示的值  
    public Object getValueAt(int row, int col) {  
    return stockdata[row][col];
    }  
    public void setStockData(Object[][] data) {
        this.stockdata = data;
        this.fireTableDataChanged();
      }

      public Object[][] getStockData() {
        return stockdata;
      }
}

4、

import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.*;
import java.util.ArrayList;

import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JTable;

import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoTable;

public class Inputfile extends JFrame implements ActionListener {

private static final long serialVersionUID = 1L;
JTextField jvbeln;
JTextField jkunnr;
JButton btn;
Object[][] pp;
SoTableModel somodel;
public Inputfile() {
JFrame f = new JFrame("SAP-Java");
JPanel p = new JPanel();
JLabel lablevbeln = new JLabel("销售单号");
JLabel lablekunnr = new JLabel("客户编号");
jvbeln = new JTextField(10);
jkunnr = new JTextField(10);
btn = new JButton("确定");
btn.addActionListener(this);
String[] colname = {"销售组织", "分销渠道", "产品组", "客户编号", "销售单号","行项目号","物料号"};
Object[][]pp ={
{"","","","","","",""}}; 

somodel = new SoTableModel(colname, pp);
JTable table = new JTable(somodel);
table.setPreferredScrollableViewportSize(new Dimension(500,200));
table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
   table.setModel(somodel);
JScrollPane scrollPane=new JScrollPane(table);
   p.add(lablevbeln);
p.add(jvbeln);
p.add(lablekunnr);
p.add(jkunnr);
p.add(btn);
f.add(p,BorderLayout.NORTH);
f.getContentPane().add(scrollPane,BorderLayout.SOUTH);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
              System.exit(0);
            }
          });  
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800,300);

}
private static JCoDestination jCoDestination;
public void actionPerformed(ActionEvent e) {
   String t1 = jvbeln.getText();
if (e.getSource() == btn) {
pp = Getsodata(t1);
somodel.setStockData(pp);
}
}

   public Object[][]Getsodata(String t1){
  Object[][] redata = null;
 // Object[][] redata ={
// {"fff","dsafasdf","dasfasf","cdd","da","da","dd"},
// {"阿呆","dsafasdf","dasfasf","cdd","da","da","dd"},
// }; 
  ArrayList<SalesOrder> solist = new ArrayList<SalesOrder>();
  ArrayList arrvkorg = new ArrayList();
  ArrayList arrvtweg = new ArrayList();
  ArrayList arrspart = new ArrayList();
  ArrayList arrkunnr = new ArrayList();
  ArrayList arrvbeln = new ArrayList();
  ArrayList arrposnr = new ArrayList();
  ArrayList arrmatnr = new ArrayList();
  
try {
jCoDestination = ConnectSAPServer.Connect();
JCoFunction function = jCoDestination.getRepository()
.getFunction("Z_RFC_SO_GETDATA");
if (function == null)
throw new RuntimeException(
"Z_RFC_SO_GETDATA not found in SAP.");

// 传入的参数
function.getImportParameterList().setValue("SVBELN", t1);
//function.getImportParameterList().setValue("SKUNNR", t2);

function.execute(jCoDestination);
           
JCoTable returnTable = function.getTableParameterList()
.getTable("ZSO_INFO");

if (returnTable.getNumRows() > 0) {
           
returnTable.firstRow();
for (int i = 0; i < returnTable.getNumRows(); i++, returnTable
.nextRow()) {
SalesOrder so = new SalesOrder();
so.setVkorg(returnTable.getString("VKORG"));
so.setVtweg(returnTable.getString("VTWEG"));
so.setSpart(returnTable.getString("SPART"));
so.setKunnr(returnTable.getString("KUNNR"));
so.setVbeln(returnTable.getString("VBELN"));
so.setPosnr(returnTable.getString("POSNR"));
so.setMatnr(returnTable.getString("MATNR"));
solist.add(so); 
arrvkorg.add(returnTable.getString("VKORG"));
arrvtweg.add(returnTable.getString("VTWEG"));
arrspart.add(returnTable.getString("SPART"));
arrkunnr.add(returnTable.getString("KUNNR"));
arrvbeln.add(returnTable.getString("VBELN"));
arrposnr.add(returnTable.getString("POSNR"));
arrmatnr.add(returnTable.getString("MATNR"));
}

     redata = new Object[returnTable.getNumRows()][7];
         for(int t =0; t<returnTable.getNumRows(); t++){
       
 redata[t][0] = arrvkorg.get(t).toString();
       
 redata[t][1] = arrvtweg.get(t).toString();
       
 redata[t][2] = arrspart.get(t).toString(); 
       
 redata[t][3] = arrkunnr.get(t).toString(); 
       
 redata[t][4] = arrvbeln.get(t).toString(); 
       
 redata[t][5] = arrposnr.get(t).toString(); 
       
 redata[t][6] = arrmatnr.get(t).toString(); 
         }
         //for(int m = 0; m<returnTable.getNumRows(); m++){
       //
 System.out.print(pp[m][0]+"~"+pp[m][1]+"~"+pp[m][5]+"~"+pp[m][6]);  
      //   }
//for (SalesOrder saporder : solist) {
                  //  System.out.println(saporder.getVbeln());
              // System.out.println(saporder.getMatnr());
         //  }


}


} catch (Exception exx) {
exx.printStackTrace();
}
  return redata;
   }
public static void main(String args[]) {
new Inputfile();
}
}

5、SE37创建函数如下:

z_rfc_so_getdata

DATA:itab LIKE TABLE OF zsoinfo WITH HEADER LINE.

  SELECT
    vbak~vkorg
    vbak~vtweg
    vbak~spart
    vbak~kunnr
     vbap~vbeln
     vbap~posnr
    vbap~matnr
    INTO CORRESPONDING FIELDS OF TABLE itab FROM vbak INNER JOIN vbap ON vbak~vbeln vbap~vbeln
    WHERE  vbak~vbeln svbeln.

  LOOP AT itab.
    "MOVE-CORRESPONDING itab TO zso_info.
    zso_info itab.
    APPEND zso_info.
  ENDLOOP.
ENDFUNCTION.

输入参数


输出参数



抱歉!评论已关闭.