SAP接口的調用


最近做一個專案用到的SAO接口的調用,用到的上傳參數獲取回傳的IRfcTable,以及以IRfcTable作為參數上傳SAP,通過查閱很多資料,發現資料說明的也多是魚龍混雜,許多沒有實現就直接貼在上面,有的還是值得借鑒的,專案完成后,記錄下,好記性不如爛筆頭,也分享給大伙借閱。

1.SAP連接

  這里先設置SAP連接

 

  public static RfcDestination GetRfcDest()
        {
            RfcConfigParameters configParams = GetConfigParams();
            RfcDestination dest = RfcDestinationManager.GetDestination(configParams);
            return dest;
        }
        private static RfcConfigParameters GetConfigParams()
        {
            RfcConfigParameters configParams = new RfcConfigParameters();
            //正式服務器
            configParams.Add(RfcConfigParameters.Name, "SAP_CONN");
            configParams.Add(RfcConfigParameters.AppServerHost, "xxx.xxx.xxx.xxx");//正式機
            configParams.Add(RfcConfigParameters.SystemNumber, "00");
            configParams.Add(RfcConfigParameters.User, "B2BACL");
            configParams.Add(RfcConfigParameters.Password, "ACLACL");
            configParams.Add(RfcConfigParameters.Client, "168");
            configParams.Add(RfcConfigParameters.Language, "EN");
            configParams.Add(RfcConfigParameters.PoolSize, "5");
            configParams.Add(RfcConfigParameters.MaxPoolSize, "10");
            configParams.Add(RfcConfigParameters.IdleTimeout, "600");
            return configParams;
        }

         2.通過參數獲取對應的IRfcTable

      

 /// <summary>
        /// 通過參數獲取SAP中Table返回值(Table)
        /// </summary>
        /// <param name="ASN"></param>
        /// <returns></returns>
        public static DataTable method(string ASN)
        {
          
            DataTable result = null;
            IRfcTable value = null;
            try
            {
                RfcDestination rfcdes = SapConn.GetRfcDest();
                RfcRepository repos = rfcdes.Repository;
                IRfcFunction func = repos.CreateFunction("方法名"); //RFC函數名
                func.SetValue("參數名", ASN); //測量點
                func.Invoke(rfcdes);
                value = func.GetTable("需要獲取的表明"); //輸出參數      
                DataTable dt = new DataTable();
                //新建列
                dt.Columns.Add("VBELN");
                dt.Columns.Add("POSNR");
                dt.Columns.Add("VGBEL");
                dt.Columns.Add("VGPOS");
                for (int i = 0; i < value.Count; i++)
                {
                    value.CurrentIndex = i;
                    DataRow dr = dt.NewRow();//新建行
                    dr["VBELN"] = value.GetString("VBELN");
                    dr["POSNR"] = value.GetString("POSNR");
                    dr["VGBEL"] = value.GetString("VGBEL");
                    dr["VGPOS"] = value.GetString("VGPOS");
                    dt.Rows.Add(dr);
                }
                System.Threading.Thread.Sleep(100);
                dt.DefaultView.Sort = "LFIMG ASC";//按Id倒序
                dt = dt.DefaultView.ToTable();//返回一個新的DataTable
                result = dt; 
            }
            catch (Exception ex)
            {
               
            }
            return result;
        }

    3.將參數以IRfcTable形式上傳SAP

     

  public static void PostTableToASap(string StaffNO)
        {

            RfcDestination rfcdes = SapConn.GetRfcDest();
            RfcRepository repos = rfcdes.Repository;
            IRfcFunction func = null;
            string ASN = null;
            func= repos.CreateFunction("RFC函數名"); //RFC函數名  
            try
            {
                //表頭部分
                IRfcStructure GOODSMVT_HEADER = func.GetStructure("GOODSMVT_HEADER");
                string time = DateTime.Now.ToString("yyyyMMdd");
                GOODSMVT_HEADER.SetValue("參數1", time); //測量點
                GOODSMVT_HEADER.SetValue("參數2", time); //測量點
                GOODSMVT_HEADER.SetValue("參數3", ""); //測量點
                func.SetValue("GOODSMVT_HEADER", GOODSMVT_HEADER);
                //Get需要操作的表T_PURORDER_IN
                IRfcTable itb = func.GetTable("表名");
 for (int i = 0; i < DT.Rows.Count-1; i++)
                            {
                                itb.Insert();
                                itb.CurrentRow.SetValue("列1", DT.Rows[i]["VGBEL"].ToString());
                                itb.CurrentRow.SetValue("列2", DT.Rows[i]["VGPOS"].ToString());
                                itb.CurrentRow.SetValue("列3", DT.Rows[i]["MATNR"].ToString());
                                itb.CurrentRow.SetValue("列4", DT.Rows[i]["LFIMG"].ToString());
                               
                            }
               func.SetValue("表名", itb);
                func.Invoke(rfcdes);
           }
            catch (Exception ex)
            {

                LogHelper.WriteLog(typeof(SapConn), ex);
               
            }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM