zoukankan      html  css  js  c++  java
  • 放一个方便调用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();
        }
    }
  • 相关阅读:
    题解——loj6279 数列分块入门3 (分块)
    题解——loj6278 数列分块入门2 (分块)
    题解——loj6277 数列分块入门1(分块)
    题解——P1133 教主的花园DP
    题解——P1108低价购买(DP)
    题解——UVA11997 K Smallest Sums
    题解——洛谷P1550 [USACO08OCT]打井Watering Hole(最小生成树,建图)
    题解——CodeForces 438D The Child and Sequence
    题解——ATCoder AtCoder Grand Contest 017 B
    题解——洛谷P2827 NOIP提高组 2016 蚯蚓
  • 原文地址:https://www.cnblogs.com/rain64531264/p/2738920.html
Copyright © 2011-2022 走看看