设为首页 收藏本站
查看: 903|回复: 0

[经验分享] 放一个方便调用SAP RFC或者BAPI的工具类源码

[复制链接]

尚未签到

发表于 2015-9-19 11:17:10 | 显示全部楼层 |阅读模式
  .NET版:
  

DSC0000.gif DSC0001.gif 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[key.ToString()]);
            }
        }
        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[dcn]);
                }
            }
        }
        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[j] = rt[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[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();
    }
}  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115757-1-1.html 上篇帖子: [转]SAP MDM 自学指南 下篇帖子: SAP ABAP 常用事务代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表