vike681 发表于 2015-9-19 11:17:10

放一个方便调用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 == null) return;
            Dictionary<String, Object>.KeyCollection kc = dic.Keys;
            IRfcStructure structs = ifunc.GetStructure(struct_name);
            foreach (object key in kc)
            {
                structs.SetValue(key.ToString(), dic);
            }
      }
      public void setParam(String paramName, Object value)
      {
            if (ifunc == null) return;
            ifunc.SetValue(paramName, value);
      }
      public void setTable(String tableName, DataTable dataTable)
      {
            if (ifunc == null) return;
            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);
                }
            }
      }
      public void clearTable(String tablename)
      {
            if (ifunc == null) return;
            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 = rt.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 = rt.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();
    }
}  
页: [1]
查看完整版本: 放一个方便调用SAP RFC或者BAPI的工具类源码