想寻求您的帮助,并要求命令使用启动和调用一个rfc功能。我已经下载了文件sap.connector.dll并利用它。我浏览网络,找不到或执行SAP组件。有办法只执行命令吗?
发布于 2015-05-13 06:10:23
你可以试试这个。我正在使用这些DLL,这是SAP连接器附带的
如果需要使用这些连接细节调用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;
}
}在这里,我注释了一些代码,因为它用于从SAP获取一些值(数据集),如果需要的话,可以使用RFC表来实现它们。
不要更改以下代码集。它是RFC calls.You的默认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;
}
}https://stackoverflow.com/questions/30206689
复制相似问题