1

requestDetails.cs,SAPconnect.cs,login.aspx.cs,request.aspx.cs を含む .net アプリケーションがあります。request.aspx ページには、従業員 ID、名前などのフィールドが含まれています。request.aspx ファイルの従業員 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...
        }
    }
}

しかし、次のようなエラーが発生しています。

コンテナ メタデータ ZSAVE の要素 ZHELP_REQTAB 不明

データを SAP テーブルに保存したいzhelp_reqtab。誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

1

これは非常に古い投稿だと思いますが、自分のことを検索してたどり着きました。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()
于 2014-12-19T15:40:35.290 に答える