放一个方便调用SAP RFC或者BAPI的工具类源码

.NET版:

 

View Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using SAPFunctionsOCX;
using FA.Sap_Work;
using SAPTableFactoryCtrl;
using SAP.Middleware.Connector;

namespace SAP_WORK
{
    public class Sap_rfc
    {
        RfcDestination prd = null;        
        IRfcFunction ifunc = null;
        public Sap_rfc(String rfcName)
        {
            IDestinationConfiguration id = new Sap_Logon();
            RfcDestinationManager.RegisterDestinationConfiguration(id);
            prd = RfcDestinationManager.GetDestination("PRD_000");
            RfcDestinationManager.UnregisterDestinationConfiguration(id);
            RfcRepository rpstry = prd.Repository;
            if (rpstry != null)
            {
                RfcFunctionMetadata rfmd = rpstry.GetFunctionMetadata(rfcName);
                ifunc = rfmd.CreateFunction();
            }
        }
        public void setStructure(String struct_name, Dictionary<String, Object> dic)
        {
            if (ifunc == nullreturn;
            Dictionary<String, Object>.KeyCollection kc = dic.Keys;
            IRfcStructure structs = ifunc.GetStructure(struct_name);
            foreach (object key in kc)
            {
                structs.SetValue(key.ToString(), dic[key.ToString()]);
            }
        }
        public void setParam(String paramName, Object value)
        {
            if (ifunc == nullreturn;
            ifunc.SetValue(paramName, value);
        }
        public void setTable(String tableName, DataTable dataTable)
        {
            if (ifunc == nullreturn;
            IRfcTable rfcTable = ifunc.GetTable(tableName);
            DataColumnCollection dcc = dataTable.Columns;
            foreach (DataRow dr in dataTable.Rows)
            {
                rfcTable.Insert();
                foreach (String dcn in dcc)
                {
                    rfcTable.CurrentRow.SetValue(dcn, dr[dcn]);
                }
            }

        }
        public void clearTable(String tablename)
        {
            if (ifunc == nullreturn;
            IRfcTable rfcTable = ifunc.GetTable(tablename);
            rfcTable.Delete();
        }
        public void execute()
        {
            if (ifunc != null)
            {
                ifunc.Invoke(prd);
            }
        }

        public Object getResult(String paramName)
        {
            Object result = null;
            if(ifunc!=null)
            result = ifunc.GetString(paramName);
            return result;
        }

        public DataTable getReturnTable(String tablename)
        {
            DataTable dt = null;
            if (ifunc != null)
            {
                IRfcTable rt = ifunc.GetTable((String)tablename);
                dt = new DataTable();
                for (int i = 0; i < rt.ElementCount; i++)
                {
                    DataColumn dc = new DataColumn(rt.GetElementMetadata(i).Name);
                    dt.Columns.Add(dc);
                }

                for (int i = 0; i < rt.RowCount; i++)
                {
                    DataRow dr = dt.NewRow();
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        dr[j] = rt[i][j].GetValue();
                    }
                    dt.Rows.Add(dr);
                }

            }
            return dt;
        }

        public DataTable getInnerTable(String tablename)
        {
            DataTable dt = null;
            IRfcTable rt = ifunc.GetTable(tablename);
            
            if (rt != null)
            {
                dt = new DataTable();
                for (int i = 0; i < rt.ElementCount; i++)
                {
                    DataColumn dc = new DataColumn(rt.GetElementMetadata(i).Name);
                    dt.Columns.Add(dc);
                }

                for (int i = 0; i < rt.RowCount; i++)
                {
                    DataRow dr = dt.NewRow();
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        dr[j] = rt[i][j].GetValue();
                    }
                    dt.Rows.Add(dr);
                }

            }
            return dt;
        }

        public void close()
        {
            if (prd != null) prd = null;
            if (ifunc != null) ifunc = null;
        }
    }
}

JAVA版:

 

View Code
import java.math.BigDecimal;
import java.util.List;

import com.sap.mw.jco.IFunctionTemplate;
import com.sap.mw.jco.JCO;
import com.sap.mw.jco.JCO.ParameterList;
import com.tools.zhengyu.datatype.DataColumn;
import com.tools.zhengyu.datatype.DataColumnCollect;
import com.tools.zhengyu.datatype.DataRow;
import com.tools.zhengyu.datatype.DataTable;

public class Sap_rfc {
    private Sap_pool pool = null;

    private JCO.Structure mStructure = null;

    private JCO.Function mFunc = null;

    private JCO.Table mTable = null;

    public Sap_rfc(String rfcName) {
        // TODO Auto-generated constructor stub
        if (pool == null) {
            pool = Sap_pool.getSapPool();
        }
        if (pool != null) {
            if (pool.getMRepository() != null) {
                IFunctionTemplate ift = pool.getMRepository()
                        .getFunctionTemplate(rfcName);
                mFunc = ift.getFunction();
            }
        }
    }

    public void setStructure(String struct_name, List<String> fieldnames,
            List<Object> fieldValues) {
        if (mFunc != null) {
            mStructure = mFunc.getImportParameterList().getStructure(
                    struct_name);
            for (int i = 0; i < fieldnames.size(); i++) {
                mStructure.setValue(fieldValues.get(i), fieldnames.get(i));
            }
        }
    }

    public void setParam(String paramName, Object value) {
        if (mFunc != null) {
            mFunc.getImportParameterList().setValue(value, paramName);
        }
    }

    public void setTable(String tablename, DataTable dataTable) {
        if (mFunc != null) {
            mTable = mFunc.getTableParameterList().getTable(tablename);
            DataColumnCollect dcc = dataTable.getDataColumnCollect();
            for (DataRow dr : dataTable.getDataRowCollect()) {
                mTable.appendRow();
                for (DataColumn dc : dcc) {
                    Object value = dr.getValue(dc.getColname());
                    if (value != null) {
                        Class tc = value.getClass();
                        if (tc.getName().equals("java.math.BigDecimal")) {
                            BigDecimal bd = (BigDecimal) value;                        
                            mTable.setValue(bd.toString(), dc
                                    .getColname());
                        } else
                            mTable.setValue(dr.getValue(dc.getColname()), dc
                                    .getColname());
                    }else {
                        mTable.setValue("", dc
                                .getColname());
                    }
                }
            }
        }
    }
    
    public void clearTable(String tablename){
        if(mFunc != null){
            mTable = mFunc.getTableParameterList().getTable(tablename);
            mTable.clear();
        }
    }
    

    public void execute() {
        if (pool.getMConnection() != null) {
            if (mFunc != null) {
                pool.getMConnection().execute(mFunc);
            }
        }
    }

    public Object getResult(String paramName) {
        Object value = null;
        try {
            ParameterList ple = mFunc.getExportParameterList();
            value = ple.getValue(paramName);
        } catch (Exception ex) {
        }
        return value;
    }

    public DataTable getReturnTable(String tablename) {
        DataTable dt = null;
        try {
            JCO.Table tbl = mFunc.getExportParameterList().getTable(tablename);
            dt = new DataTable();
            int colcnt = 0;
            if (tbl.getNumColumns() > 0) {
                colcnt = tbl.getNumColumns();
                for (int i = 0; i < tbl.getNumColumns(); i++) {
                    DataColumn dc = new DataColumn(tbl.getName(i));
                    dt.getDataColumnCollect().addColumn(dc);
                }
            }
            if (tbl.getNumRows() > 0) {
                for (int i = 0; i < tbl.getNumRows(); i++) {
                    DataRow dr = dt.newRow();
                    tbl.setRow(i);
                    for (int j = 0; j < colcnt; j++) {
                        dr.setValue(j, tbl.getValue(j));
                    }
                    dt.getDataRowCollect().add(dr);
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return dt;
    }
    
    public DataTable getInnerTable(String tablename){
        DataTable dt = null;
        try {
            JCO.Table tbl = mFunc.getTableParameterList().getTable(tablename);
            dt = new DataTable();
            int colcnt = 0;
            if (tbl.getNumColumns() > 0) {
                colcnt = tbl.getNumColumns();
                for (int i = 0; i < tbl.getNumColumns(); i++) {
                    DataColumn dc = new DataColumn(tbl.getName(i));
                    dt.getDataColumnCollect().addColumn(dc);
                }
            }
            if (tbl.getNumRows() > 0) {
                for (int i = 0; i < tbl.getNumRows(); i++) {
                    DataRow dr = dt.newRow();
                    tbl.setRow(i);
                    for (int j = 0; j < colcnt; j++) {
                        dr.setValue(j, tbl.getValue(j));
                    }
                    dt.getDataRowCollect().add(dr);
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return dt;
    }
    
    public void writeHtml(String msgTblName, String htmlPath) {
        try {
            JCO.Table tbl = mFunc.getTableParameterList().getTable(msgTblName);
            tbl.writeHTML(htmlPath);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void close() {
        this.pool.close();
    }
}

 

posted @ 2012-10-25 15:26  郑宇  阅读(723)  评论(0编辑  收藏  举报