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;
}
}
本文介绍了一个使用Java实现的SAP接口调用方法,通过设置配置参数并调用特定函数,从SAP返回DataTable。详细阐述了如何获取RfcDestination,配置参数,调用函数以及处理返回的表格数据。
551

被折叠的 条评论
为什么被折叠?



