我的.net应用程序有requestDetails.cs,SAPconnect.cs,login.aspx.cs,request.aspx.cs。 request.aspx页面包含员工ID,姓名等字段。我想将request.aspx文件的employee id字段连接到SAP表字段。我使用SAP .NET连接器。我对每个文件的编码如下。
SAPconnect.cs
public class SAPsystemconnect:IDestinationConfiguration
{
public RfcConfigParameters GetParameters(string destinationName)
{
RfcConfigParameters parms = new RfcConfigParameters();
if ("DEV".Equals(destinationName))
{
parms.Add(RfcConfigParameters.AppServerHost, "ECC6");
parms.Add(RfcConfigParameters.SystemNumber, "04");
parms.Add(RfcConfigParameters.User, "sapuser");
parms.Add(RfcConfigParameters.Password, "newmaars1");
parms.Add(RfcConfigParameters.Client, "800");
parms.Add(RfcConfigParameters.Language, "EN");
parms.Add(RfcConfigParameters.PoolSize, "5");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "600");
}
return parms;
}
public bool ChangeEventsSupported()
{
//throw new NotImplementedException();
return false;
}
public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
}
login.aspx.cs
protected void logon_Click(object sender, EventArgs e)
{
SAPsystemconnect sapconn = new SAPsystemconnect();
RfcDestinationManager.RegisterDestinationConfiguration(sapconn);
RfcDestination rfcDest = null;
rfcDest = RfcDestinationManager.GetDestination("DEV");
RequestDetails reqobj = new RequestDetails();
reqobj.GetRequestDetails(rfcDest);
// RfcDestinationManager.UnregisterDestinationConfiguration(sapconn);
Response.Redirect("request.aspx");
System.Environment.Exit(0);
}
requestdetails.cs
public class RequestDetails
{
public string empid; //personnel numner
public string name; //name of the employee
public string department; //department of employee
public string descr; //description of help
public string problem; //problem
public string solution; //solution for the problem
public string status; //status of help
public string findings; //proble found during verification ;
public string resolution; //resolutions for problem detected ;
public string recommend; //recommended action
public string remarks; //remarks for work done;
public string feedback; //user feedback for work done;
public int dococde; //description of document code
public int auth1; //personnel number;
public int auth2; //personnel numnber;
public string sapcheck; //checkbox
public string othercheck;//checkbox
public string priority; //priority of request(HIGH,MED,LOW)
public string saptrans; //transaction drop down
public string tranreq; //request/task
public string followtrans; //follow transaction type
public string followdoc; //follow transaction doc number
public void GetRequestDetails(RfcDestination destination)
{
try
{
RfcRepository repo = destination.Repository;
IRfcFunction createRequest = repo.CreateFunction("ZSAVE");
createRequest.Invoke(destination);
IRfcTable helpreqtab = createRequest.GetTable("ZHELP_REQTAB");
RequestDetails reqobj = new RequestDetails();
reqobj.empid = helpreqtab.GetString("ZREQ_EMPID");
}
catch (RfcCommunicationException e)
{
}
catch (RfcLogonException e)
{
// user could not logon...
}
catch (RfcAbapRuntimeException e)
{
// serious problem on ABAP system side...
}
catch (RfcAbapBaseException e)
{
// The function module returned an ABAP exception, an ABAP message
// or an ABAP class-based exception...
}
}
}
但是我收到了这样的错误
Element ZHELP_REQTAB of container metadata ZSAVE unknown
我想将数据保存到SAP表zhelp_reqtab,任何人都可以告诉我哪里出错了吗?
答案 0 :(得分:0)
我意识到这是一个非常古老的帖子,但我在搜索自己的一些东西时登陆了它。 SAP .Net Connector 3.0有时很难找到相关信息,因此当我找到分享知识的机会时,我会尝试这样做。基本上你的错误信息是说它找不到名为ZHELP_REQTAB的表,你确定它是返回表的确切名称。它可能是一个结构而不是一个表吗?我将转到SAP中的事务SE37并显示该BAPI,从那里您可以看到导出表和结构并获取这些对象的真实名称。一旦你有平方去访问它实际上非常简单。请记住,IRfcTable基本上是IrfcStructures的列表,IRfcTables实现IEnumerable,因此您可以使用LINQ进行操作,或者如果您愿意,可以使用Foreach语句进行迭代。另外,请确保BAPI是否为您首先查看的错误消息生成标准RETURN表,以确保没有发生错误。如果bapi生成该表,那么在ABAP异常范围之外的SAP内部发生的错误将在那里报告,并且不会抛出异常。以下是访问表数据的示例。
foreach (IRfcStructure str in helpreqtab)
{
//You can use get string if thefield type is string, you would use the proper Getmethod based on type of the field.
empid = str["empid field name in table"].GetString()
}
或者如果结果是简单的结构则不需要循环
empid = helpreqStruct["empid field name in table"].GetString()