您的位置:首页 > 其它

.net连接SAP返回Table 整理

2014-08-11 15:10 183 查看
public class SAPHelper

{

public static RfcDestination GetRfcDestination()

{

RfcConfigParameters rfcPar = new RfcConfigParameters();

rfcPar.Add(RfcConfigParameters.Name, "名称");

rfcPar.Add(RfcConfigParameters.SystemID, "SAP中的SystemID");

rfcPar.Add(RfcConfigParameters.AppServerHost, "IP地址");

rfcPar.Add(RfcConfigParameters.Client, "端口与SAP一致");

rfcPar.Add(RfcConfigParameters.User, "用户名");

rfcPar.Add(RfcConfigParameters.Password, "密码");

rfcPar.Add(RfcConfigParameters.SystemNumber, "序号默认定义为00");

rfcPar.Add(RfcConfigParameters.Language, "语言EN为英文");

rfcPar.Add(RfcConfigParameters.IdleTimeout, "10");

rfcPar.Add(RfcConfigParameters.MaxPoolSize, "10");

rfcPar.Add(RfcConfigParameters.PoolSize, "5");

RfcDestination dest = RfcDestinationManager.GetDestination(rfcPar);

return dest;

}

/// <summary>

/// SAP返回DataTable

/// </summary>

/// <param name="functionName">函数名称</param>

/// <param name="inputParame">传入SAP参数集合</param>

/// <param name="tableName">SAP中Return的Table名称</param>

/// <returns></returns>

public static DataTable GetTable(string functionName, Hashtable inputParame, string tableName)

{

DataTable dt = null;

if (functionName == "" || functionName == null)

{

dt = null;

}

else

{

RfcDestination dest = GetRfcDestination();

RfcRepository rfcrep = dest.Repository;

IRfcFunction myfun = null;

myfun = rfcrep.CreateFunction(functionName);

if (inputParame.Count > 0)

{

foreach (DictionaryEntry de in inputParame)

{

myfun.SetValue(de.Key.ToString().Trim(), de.Value);//SAP里面的传入参数

}

}

myfun.Invoke(dest);

IRfcTable myrfcTableReturn = myfun.GetTable("OT_RETURN");

if (myrfcTableReturn == null)

{

dt = null;

}

else

{

string typeName = myrfcTableReturn[0][0].GetValue().ToString().Trim();

if (typeName == "S".Trim())

{

IRfcTable myrfcTable = null;

if (tableName != "" || tableName != null)

{

myrfcTable = myfun.GetTable(tableName);//rfc server function 返回值table结构名称

}

if (myrfcTable != null)

{

dt = new DataTable();

int liElement = 0;

for (liElement = 0; liElement < myrfcTable.ElementCount; liElement++)

{

RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);

dt.Columns.Add(metadata.Name);//循环创建列

}

foreach (IRfcStructure dr in myrfcTable)//循环table结构表

{

DataRow row = dt.NewRow();//创建新行

for (liElement = 0; liElement < myrfcTable.ElementCount; liElement++)

{

RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);

row[metadata.Name] = dr.GetString(metadata.Name).Trim();

}

dt.Rows.Add(row);

}

}

}

else

{

dt = new DataTable();

int liElement = 0;

for (liElement = 0; liElement < myrfcTableReturn.ElementCount; liElement++)

{

RfcElementMetadata metadata = myrfcTableReturn.GetElementMetadata(liElement);

dt.Columns.Add(metadata.Name);//循环创建列

}

foreach (IRfcStructure dr in myrfcTableReturn)//循环table结构表

{

DataRow row = dt.NewRow();//创建新行

for (liElement = 0; liElement < myrfcTableReturn.ElementCount; liElement++)

{

RfcElementMetadata metadata = myrfcTableReturn.GetElementMetadata(liElement);

row[metadata.Name] = dr.GetString(metadata.Name).Trim();

}

dt.Rows.Add(row);

}

}

}

}

return dt;

}

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: