.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;
}
}
{
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;
}
}
相关文章推荐
- SAP--我的blog连接整理
- .net 连接 SAP后台数据库(AIX+oracle)
- .NET连接SAP系统专题:C#调用BAPI给账户赋予权限(八)
- .NET连接SAP系统专题:sapnco.dll在ASP.NET中载入失败的解决方法(九)
- .NET连接SAP系统专题:C#如何导入内文至SAP(十一)
- SAP--我的blog连接整理
- .net 连接SAP for NCO 3.0
- .NET连接SAP系统专题:C#(NCO3)调用BAPI的代码(七)
- .NET连接SAP系统专题:NCO3调用BAPI的一些说明(六)
- .Net连接到SAP
- .NET连接SAP错误:无法加载DLL"LIBRFC32.DLL"找不到指定的模块
- .NET连接SAP系统专题:C#调用RFC代码(三)
- .NET连接SAP系统专题:SAP中新建可远程调用的RFC(二)
- .NET连接SAP系统专题:NCO3调用BAPI的代码(七)
- .NET连接SAP系统专题:SAP中新建可远程调用的RFC(二)
- SAP--我的blog连接整理
- .NET连接SAP系统专题:.NET调用RFC几种方式(一)
- .NET连接SAP系统专题:C#(NCO3)调用BAPI(五)
- .NET连接SAP系统专题:sapnco.dll在ASP.NET中载入失败的解决方法(九)
- .NET连接SAP系统专题:sapnco.dll在ASP.NET中载入失败的解决方法(九)