C#调用SAP函数,传入参数为表

 

//using SAP.Middleware.Connector;
 
//private RfcConfigParameters _params = new RfcConfigParameters();
//private RfcDestination _rfcDest;
 
//RfcConfigParameters parms = new RfcConfigParameters();
//            parms.Add(RfcConfigParameters.Name, "xxx");
//            parms.Add(RfcConfigParameters.AppServerHost, "xxx");
//            parms.Add(RfcConfigParameters.SystemNumber, "00");
//            parms.Add(RfcConfigParameters.Client, "900");
//            parms.Add(RfcConfigParameters.User, "xxx");
//            parms.Add(RfcConfigParameters.Password, "xxxxx");
//            parms.Add(RfcConfigParameters.Language, "EN");
//            parms.Add(RfcConfigParameters.PoolSize, "5");
//            parms.Add(RfcConfigParameters.MaxPoolSize, "10");
//            parms.Add(RfcConfigParameters.IdleTimeout, "600");
//            return parms;
 
//_rfcDest = RfcDestinationManager.GetDestination(_params);
public DataTable GetSAPData(DataTable dt)
        {
            DataTable dtSAPData = new DataTable();
            try
            {
                dtSAPData.Columns.Add("DATA1", typeof(string));
                dtSAPData.Columns.Add("DATA2", typeof(string));
                dtSAPData.Columns.Add("DATA3", typeof(string));
 
                string strOrder = null;
 
                RfcRepository   rfcRep      =   _rfcDest.Repository;
                IRfcFunction    func        =   rfcRep.CreateFunction("Z_RFC_XXXX");
                IRfcTable       tSAP    =   func.GetTable("INPUT_TABLE");
 
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    str1 = dt.Rows[i][0].ToString();
                    str2 = dt.Rows[i][1].ToString();
                    str3 = dt.Rows[i][2].ToString();
                    IRfcStructure struSAP = tSAP.Metadata.LineType.CreateStructure();
                    struSAP.SetValue("str1", str1);
                    struSAP.SetValue("str2", str2);
                    struSAP.SetValue("str3", str3);
                    tSAP.Append(struSAP);
                }
                func.SetValue("INPUT_TABLE", tSAP); //table 参数
                func.SetValue("WERKS", "A");        //单个参数    
                func.SetValue("STATUS", "B");    //单个参数
                func.Invoke(_rfcDest);
                IRfcTable SAPDataTable = func.GetTable("RETURN_TABLE");
 
                for (int i = 0; i < SAPDataTable.RowCount; i++)
                {
                    IRfcStructure   stru    =   SAPDataTable[i];
                    DataRow         dr      =   dtSAPData.NewRow();
                    dr["DATA1"] = stru.GetValue("X").ToString();   
                    dr["DATA2"] = stru.GetValue("Y").ToString();   
                    dr["DATA3"] = stru.GetValue("Z").ToString();   
                    dtSAPData.Rows.Add(dr);
                }
            }
            catch(Exception ex)
            {
                string strcatch = ex.Message;
            }
            return dtSAPData;
        }

 

        以上是传入传出都为table的情况。
        还有一种直接传入一条数据的情况,当然,SAP函数里面的接收参数还是table        
        代码如下:
       
        var rfcDestination = SAPUtility.GetDestination(SapDestionation.PRD_800, SapUsers.PRD_IT06);
        BAPI_USER_GETLIST
        RfcRepository rfcrep = rfcDestination.Repository;
        IRfcFunction myfun = rfcrep.CreateFunction("Z_MISGETTEXT");//调用的SAP函数
        var table = myfun.GetTable("ZOBJTEXT");//SAP函数的table
        //设置传入参数
        table.Insert();
        table.CurrentIndex = 0;
        var currentRow = table.CurrentRow;
        currentRow.SetValue("TDOBJECT", "测试OBJ");
        currentRow.SetValue("TDNAME", "测试NAME");
        currentRow.SetValue("TDID", "测试ID");
        currentRow.SetValue("LANGUAGE", "测试语言");
        myfun.Invoke(rfcDestination); //提交调用BAPI
        //取得返回值,这里的TEXT项目也是SAP函数table【ZOBJTEXT】中的字段
        for (int i = 0; i < table.RowCount; i++)
        {
            table.CurrentIndex = i;
            var currentRow2 = table.CurrentRow;
            Console.WriteLine(currentRow2.GetString("TEXT"));
        }
        Console.Read();
     

 

posted @ 2021-12-27 15:45  毛小毛  阅读(587)  评论(0编辑  收藏  举报