ASp.net 中調用BAPI

來源:互聯網
上載者:User
DataProviderSAP. 安裝:

執行安裝檔案進行安裝DataProviderSAP.msi,預設安裝路徑:C:\Program Files\Common Files\Microsoft Shared\Adapters\ SAP\。 2 .Microsoft Visual Studio 2005 建立項目:添加引用Microsoft.Adapter.SAP.SAPProvider.dll。Microsoft.Adapter.SAP.SAPProvider.dll從以下安裝路徑尋找:C:\Program Files\Common Files\Microsoft Shared\Adapters\ SAP\。 3 .C# 調用FRC 語句:using Microsoft.Adapter.SAP;//添加引用SAPConnection con = new SAPConnection("ASHOST=10.1.10.102; CLIENT=200;SYSNR=00;USER=***;PASSWD=***;LANG=zh");//SAP伺服器串連參數設定,            con.Open();            SAPCommand cmd = new SAPCommand(con);            cmd.CommandText = "EXEC BAPI_CUSTOMER_GETLIST @IDRANGE=@param OUTPUT";//執行遠程RFC BAPI_CUSTOMER_GETLIST,執行RFC的參數傳遞過程參考下邊的EXEC 語句的文法//以下為RFC調用參數賦值並指定Input、Output類型            SAPParameter param = new SAPParameter("@param", ParameterDirection.InputOutput);            DataTable dt = new DataTable();            dt.Columns.Add("SIGN");            dt.Columns.Add("OPTION");           dt.Columns.Add("LOW");            dt.Columns.Add("HIGH");            DataRow row = dt.NewRow();            row["LOW"] = 1;            row["HIGH"] = 1000;            dt.Rows.Add(row);            param.Value = dt;            cmd.Parameters.Add(param);//執行結果放在SAPDataReade中            SAPDataReader dr = cmd.ExecuteReader();            //retrieving returned datareaders            do            {                Console.WriteLine("value of returned datareader: " + dr.GetSchemaTable().TableName);                 while (dr.Read())                {                    string line = "";                    for (int i = 0; i < dr.FieldCount; i++)                        line = line + "| " + dr.GetValue(i).ToString();                    Console.WriteLine(line);                }            }            while (dr.NextResult());            Console.WriteLine("Checking returned value of parameter @IDRANGE...");            DataTable dt1 = (DataTable)param.Value;            foreach (DataRow row1 in dt1.Rows)            {                string line = "";                for (int i = 0; i < dt1.Columns.Count; i++)                    line = line + "| " + row1[i].ToString();                Console.WriteLine(line);            } 4 EXEC 語句的文法以下幾節介紹了針對該提供者實現 EXEC 語句的文法規範。請注意,在某些情況下,該文法與 Transact-SQL 文法稍有不同。 4.1 EXEC 文法    EXEC rfc_name    [{value | @variable [OUTPUT]}][,...n]    [@parameter = {value | @variable [OUTPUT]}][,...n] [;]   其中: rfc_name 指定要執行的函數調用的名稱。 parameter 指定函數介面中定義的參數名。 value 指定參數值。 @variable 指定替換參數。使用 DbParameter 介面可以綁定參數值。 output 指定 SAP RFC 參數為 OutputInputOutput4.2 處理具名引數和未具名引數以下內容是在 EXEC 查詢中指定具名引數和未具名引數的準則:1. 在指定參數時,可以通過命名這些參數(例如,@parameter_name=value)來指定參數,也可以只提供值。2. 當使用預設值定義參數時,可以在不指定參數的情況下執行該操作。3. 當使用 @parameter_name=value 格式時,則無需按照函數調用中所定義的順序來提供參數名和常數。4. 未具名引數的所需順序如下所示:o        IMPORT (Input)o        EXPORT (Output)o        TABLE (InputOutput)但是,排序是在參數類型內按照上面所列順序進行的。例如,您有 6 個未具名引數,這 3 種參數類型各兩個,如下表所示,參數排序應為 param1param2param3param4param5param6
IMPORT 參數 EXPORT 參數 TABLE 參數
param1 param3 param5
param2 param4 param6
5. 使用未具名引數時,您需要指定所有參數(包括選擇性參數和必選參數)的值。只有當選擇性參數出現在參數列表的末尾時,才可以省略它們。不支援使用“Default”或空格跳過選擇性參數,如下面樣本所示:

EXEC Proc_Test_Defaults , 'A';

請改用下列文法以擷取所需的結果:

EXEC Proc_Test_Defaults @p2='A';

6. EXEC 查詢不支援使用具有下列屬性的參數:o        嵌套結構(包含其他結構作為其欄位的結構)。o        巢狀表格。o        包含結構的表。o        包含表的結構。o        欄位中包含複合字元串類型(例如 SSTRINGRAWSTRING)的結構或表。7. 下表列出了執行 RFC 時 RFC 參數類型與參數方向之間的邏輯映射:
PFC 參數類型 查詢關鍵字 參數方向
Import 參數 Paramdirection.Input
Export 參數 Output Paramdirection.Output
Table 參數 Output /無 InputOutput
8. 9. 以下內容是處理參數的一般準則:a.      您可以將參數值指定為常數,也可以通過在查詢中使用預留位置來指定參數值。b.      在查詢中使用預留位置時,必須建立 SAPParameter 對象並將其添加到相應的命令對象中。然後,將佔位符的名稱傳遞到建構函式中;方向和值取決於上下文。§         對於 Input 參數,請不要在查詢中指定參數方向的關鍵字。但必須設定該參數對象的 value 欄位,否則該提供者將引發異常。請一定不能顯式設定該參數對象的 direction 欄位,因為該提供者的預設設定為 Input。§         對於其他參數,請使用格式 @paramname=@placeholder 並在查詢中顯式指定 Output 關鍵字。然後,您必須添加與預留位置相對應的 SAPParameter 並根據參數類型將參數方向顯式設定為 ParamDirection.OutputParamDirection.InputOutput。c.      參數名稱和預留位置名稱不區分大小寫。d.      除非參數具有不同的方向,否則它們的名稱不能在查詢中重複。e.      預留位置名稱不能在查詢中重複。[返回頁首] 4.3 EXEC 語句樣本· 若要執行不帶輸入參數的 BAPI,請使用以下文法;資料通過 DataReader 對象返回:·                 EXEC BAPI_COMPANYCODE_GETLIST       · 若要執行帶有輸入參數的 RFC,請使用以下文法:·                 Exec RFC_CUSTOMER_GET @NAME1='Contoso'       · 若要執行帶有指定的輸入參數但沒有參數名稱的 RFC,請使用以下文法:·                 Exec RFC_CUSTOMER_GET '*', 'Contoso'       · 若要執行帶有指定為變數的輸入參數的 RFC,請使用以下文法:·                 Exec RFC_CUSTOMER_GET @var       在此樣本中,必須建立名為 @var 的參數,並顯式設定該參數的值(例如,設定為“1001”),原因是 RFC_CUSTOMER_GET 的第一個參數對應於 KUNNR(客戶號)。· 若要執行使用變數作為輸入參數名稱的 RFC,請使用以下文法:·                 Exec RFC_CUSTOMER_GET @KUNNR=@var1, @NAME1='Contoso'       您必須建立名為 @var1 的 SAPParameter,指定它的值,然後將它綁定到對應的命令對象。新建立的參數對象的預設方向為 input。· 若要執行 BAPI,並將表作為參數返回,請使用以下文法:·                 EXEC BAPI_COMPANYCODE_GETLIST @ COMPANYCODE_LIST=@tableVar OUTPUT       您必須建立名為 @var1 的 SAPParameter,指定它的值,然後將它綁定到對應的命令對象。新建立的參數對象的方嚮應為 InputOutput
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.