2013-02-28 19 views
1

我有一个.net应用程序,其中包含requestDetails.cs,SAPconnect.cs,login.aspx.cs,request.aspx.cs。 request.aspx页面包含诸如员工ID,姓名等字段。我想将request.aspx文件的员工ID字段连接到SAP表字段。我使用SAP .NET连接器。我为每个文件编码如下。使用SAP表字段连接.apsx字段

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 
错误0

我想将数据保存到SAP表zhelp_reqtab,任何人都可以告诉我哪里出错了?

回答

0

我意识到这是一个非常古老的帖子,但我登陆它寻找我自己的一些东西。 SAP .Net Connector 3.0有时可能很难找到信息,所以当我找到机会共享我尝试这样做的知识时。基本上你的错误信息是说它找不到名为ZHELP_REQTAB的表,你确定这是返回的表的完全名称。它可能是一个结构而不是表格?我会去SAP中的事务SE37并显示该BAPI,从那里您可以看到导出表和结构并获取这些对象的真实名称。一旦你有了这个方法来访问那些其实很简单的东西。请记住,IRfcTable基本上是IrfcStructures的列表,同时IRfcTables实现IEnumerable,因此您可以使用LINQ操作,或者如果您愿意,可以使用Foreach语句来迭代。同时确保BAPI为错误消息生成一个标准的返回表,您首先查看它以确保没有错误发生。如果bapi生成该表,那么SAP内部发生的错误将在ABAP异常的范围之外进行报告,而不会在您身边引发异常。以下是访问表数据的示例。

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()