RFC 结构:
Name : | Z_RFC_XXXX | |||
Import: | ||||
WERKS | Plant | A | ||
STATUS | Export indicator | B | ||
Table: | INPUT_TABLE | Input Table | ||
RETURN_TABLE | Export Table | |||
INPUT_TABLE: | ||||
str1 | CHAR | 12 | ||
str2 | CHAR | 12 | ||
str3 | CHAR | 12 | ||
RETURN_TABLE: | ||||
X | CHAR | 3 | 0 | |
Y | CHAR | 12 | 0 | |
Z | CHAR | 18 | 0 |
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);
1 public DataTable GetSAPData(DataTable dt) 2 { 3 DataTable dtSAPData = new DataTable(); 4 try 5 { 6 dtSAPData.Columns.Add("DATA1", typeof(string)); 7 dtSAPData.Columns.Add("DATA2", typeof(string)); 8 dtSAPData.Columns.Add("DATA3", typeof(string)); 9 10 11 string strOrder = null; 12 13 RfcRepository rfcRep = _rfcDest.Repository; 14 IRfcFunction func = rfcRep.CreateFunction("Z_RFC_XXXX"); 15 IRfcTable tSAP = func.GetTable("INPUT_TABLE"); 16 17 for (int i = 0; i < dt.Rows.Count; i++) 18 { 19 str1 = dt.Rows[i][0].ToString(); 20 str2 = dt.Rows[i][1].ToString(); 21 str3 = dt.Rows[i][2].ToString(); 22 IRfcStructure struSAP = tSAP.Metadata.LineType.CreateStructure(); 23 struSAP.SetValue("str1", str1); 24 struSAP.SetValue("str2", str2); 25 struSAP.SetValue("str3", str3); 26 tSAP.Append(struSAP); 27 } 28 func.SetValue("INPUT_TABLE", tSAP); //table 参数 29 func.SetValue("WERKS", "A"); //单个参数 30 func.SetValue("STATUS", "B"); //单个参数 31 func.Invoke(_rfcDest); 32 IRfcTable SAPDataTable = func.GetTable("RETURN_TABLE"); 33 34 for (int i = 0; i < SAPDataTable.RowCount; i++) 35 { 36 IRfcStructure stru = SAPDataTable[i]; 37 DataRow dr = dtSAPData.NewRow(); 38 39 dr["DATA1"] = stru.GetValue("X").ToString(); 40 dr["DATA2"] = stru.GetValue("Y").ToString(); 41 dr["DATA3"] = stru.GetValue("Z").ToString(); 42 43 44 dtSAPData.Rows.Add(dr); 45 } 46 } 47 catch(Exception ex) 48 { 49 string strcatch = ex.Message; 50 } 51 return dtSAPData; 52 }