想寻求您的帮助,并要求命令用于启动和调用rfc函数。 我已下载文件sap.connector.dll并使用它。我浏览网络,我找不到或做SAP组件。有没有办法只执行命令?
答案 0 :(得分:0)
你可以试试这个.. 我正在使用SAP Connector
附带的这些DLL如果您需要使用这些连接详细信息调用SAP事务,可以尝试此操作..
public void ExecuteTransaction(string tCode, string input)
{
int sub = 0;
try
{
tCode = "YOUR Transaction Code";
RfcConfigParameters rfc = new RfcConfigParameters();
rfc.Add(RfcConfigParameters.Name, "BOXName");
rfc.Add(RfcConfigParameters.AppServerHost, "HOST");
rfc.Add(RfcConfigParameters.SAPRouter, "YOUR ROUTER STRING");
rfc.Add(RfcConfigParameters.Client, "CLIENT");
rfc.Add(RfcConfigParameters.UseSAPGui, "1");
rfc.Add(RfcConfigParameters.User, "SAP USERNAME");
rfc.Add(RfcConfigParameters.Password, "PW");
rfc.Add(RfcConfigParameters.SystemNumber, "SYS NUMBER");
rfc.Add(RfcConfigParameters.Language, "EN");
rfc.Add(RfcConfigParameters.PoolSize, "5");
//rfc.Add(RfcConfigParameters.IdleCheckTime, "0");
RfcDestination rfcDest = RfcDestinationManager.GetDestination(rfc);
//rfcDest.Ping();
RfcRepository rfcRep = rfcDest.Repository;
IRfcFunction funcArtikel = rfcRep.CreateFunction("ABAP4_CALL_TRANSACTION");
//IRfcTable itab = funcArtikel.GetTable("SPAGPA_TAB");
funcArtikel.SetValue("TCODE", tCode);
funcArtikel.SetValue("MODE_VAL", "A");
funcArtikel.SetValue("UPDATE_VAL", "A");
funcArtikel.SetValue("SKIP_SCREEN", "X");
//itab.Append();
//itab.SetValue("PARID", "PARAMETER NAME");
//itab.SetValue("PARVAL", VALUE);
//funcArtikel.SetValue("SPAGPA_TAB", itab);
funcArtikel.Invoke(rfcDest);
}
catch (Exception ex)
{
lblError.Text = ex.ToString();
//throw ex;
}
}
在这里,我已经评论了一些代码,因为它用于通过RFC表从SAP获取一些值(数据集),如果需要,也可以启用它们。
并且不要更改以下代码集。它是RFC调用的默认SAP事务。您可以更改所需的任何TCODE。
IRfcFunction funcArtikel = rfcRep.CreateFunction("ABAP4_CALL_TRANSACTION");
//IRfcTable itab = funcArtikel.GetTable("SPAGPA_TAB");
funcArtikel.SetValue("TCODE", tCode);
funcArtikel.SetValue("MODE_VAL", "A");
funcArtikel.SetValue("UPDATE_VAL", "A");
funcArtikel.SetValue("SKIP_SCREEN", "X");
如果你使用IrfcTable检索一些数据,你可能需要将IRfcTable转换为DataTable,你可以使用它。
public static class IRfcTableExtentions
{
/// <summary>
/// Converts SAP table to .NET DataTable table
/// </summary>
/// <param name="sapTable">The SAP table to convert.</param>
/// <returns></returns>
public static DataTable ToDataTable(this IRfcTable sapTable, string name)
{
DataTable adoTable = new DataTable(name);
//... Create ADO.Net table.
for (int liElement = 0; liElement < sapTable.ElementCount; liElement++)
{
RfcElementMetadata metadata = sapTable.GetElementMetadata(liElement);
adoTable.Columns.Add(metadata.Name, GetDataType(metadata.DataType));
}
//Transfer rows from SAP Table ADO.Net table.
foreach (IRfcStructure row in sapTable)
{
DataRow ldr = adoTable.NewRow();
for (int liElement = 0; liElement < sapTable.ElementCount; liElement++)
{
RfcElementMetadata metadata = sapTable.GetElementMetadata(liElement);
switch (metadata.DataType)
{
case RfcDataType.DATE:
ldr[metadata.Name] = row.GetString(metadata.Name).Substring(0, 4) + row.GetString(metadata.Name).Substring(5, 2) + row.GetString(metadata.Name).Substring(8, 2);
break;
case RfcDataType.BCD:
ldr[metadata.Name] = row.GetDecimal(metadata.Name);
break;
case RfcDataType.CHAR:
ldr[metadata.Name] = row.GetString(metadata.Name);
break;
case RfcDataType.STRING:
ldr[metadata.Name] = row.GetString(metadata.Name);
break;
case RfcDataType.INT2:
ldr[metadata.Name] = row.GetInt(metadata.Name);
break;
case RfcDataType.INT4:
ldr[metadata.Name] = row.GetInt(metadata.Name);
break;
case RfcDataType.FLOAT:
ldr[metadata.Name] = row.GetDouble(metadata.Name);
break;
default:
ldr[metadata.Name] = row.GetString(metadata.Name);
break;
}
}
adoTable.Rows.Add(ldr);
}
return adoTable;
}
}