• ASp.net 中调用BAPI


    DataProviderSAP. 安装:
    执行安装文件进行安装DataProviderSAP.msi,默认安装路径:
    C:\Program Files\Common Files\Microsoft Shared\Adapters\ SAP\。
    2Microsoft Visual Studio® 2005新建项目
    添加引用Microsoft.Adapter.SAP.SAPProvider.dll。
    Microsoft.Adapter.SAP.SAPProvider.dll从以下安装路径查找:
    C:\Program Files\Common Files\Microsoft Shared\Adapters\ SAP\。
    3C# 调用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);
                }
    4EXEC 语句的语法
    以下几节介绍了针对该提供程序实现 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 参数为 OutputInputOutput
    4.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
  • 相关阅读:
    ege demo
    Easy Graphics Engine vs2015使用
    c++ demo
    leetcode 13 -> Roman to Integer
    leetcode 12 -> Integer to Roman
    12. Integer to Roman
    leetcode 9 -> Palindrome Number
    8. String to Integer (atoi)
    获取字符串中长度最长的回文字符串
    leetcode 5-> Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/weichuo/p/1736745.html
Copyright © 2020-2023  润新知