使用SAP表字段连接.apsx字段

时间:2013-02-28 07:00:12

标签: asp.net sap

我的.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,任何人都可以告诉我哪里出错了吗?

1 个答案:

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