zoukankan      html  css  js  c++  java
  • SAP .net 新建表插入数据 客户端显示 不完全手记2

    客户端开始

    private void button1_Click(object sender, EventArgs e)
     {
                Execute();
      } 
     
     public void Execute()
            {
                IDestinationConfiguration ID = new MyBackendConfig();
                RfcDestinationManager.RegisterDestinationConfiguration(ID);
                //登录
                RfcDestination prd = RfcDestinationManager.GetDestination("PA0_000");
                Execute(prd);
                //退出登录
                RfcDestinationManager.UnregisterDestinationConfiguration(ID);
            }
     
    //登陆SAP前的准备工作
            public class MyBackendConfig : IDestinationConfiguration
            {
                public RfcConfigParameters GetParameters(String destinationName)
                {
                    if ("PA0_000".Equals(destinationName))
                    {
                        RfcConfigParameters parms = new RfcConfigParameters();
                        parms.Add(RfcConfigParameters.AppServerHost, "192.168.2.165");   //SAP主机IP
                        parms.Add(RfcConfigParameters.SystemNumber, "00");  //SAP实例
                        parms.Add(RfcConfigParameters.User, "SAP*");  //用户名
                        parms.Add(RfcConfigParameters.Password, "123");  //密码
                        parms.Add(RfcConfigParameters.Client, "000");  // Client
                        parms.Add(RfcConfigParameters.Language, "ZH");  //登陆语言
                        parms.Add(RfcConfigParameters.PoolSize, "5");
                        parms.Add(RfcConfigParameters.MaxPoolSize, "10");
                        parms.Add(RfcConfigParameters.IdleTimeout, "60");
                        return parms;
                    }
                    else 
                        return null;
                }
                public bool ChangeEventsSupported()
                {
                    return false;
                }
                public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
            } 
    

    分析:IDestinationConfiguration 字面意 我的指定设置 ,实例的一个类MyBackendConfig ,该类继承IDestinationConfiguration,说明该类用来配置或重写标准配置。
     RfcDestinationManager.RegisterDestinationConfiguration(ID);保存配置。
      //登录
    RfcDestination prd = RfcDestinationManager.GetDestination("PA0_000");
    走的是RfcDestinationManager里的方法,并传递参数PA0_000,跟踪代码得知执行的是   public RfcConfigParameters GetParameters(String destinationName)方法,及自定义配置的方法。
    其中:RfcConfigParameters.SystemNumber对应的是SAP中系统编号,在登录窗口点击属性



    RfcConfigParameters.Client为集团编号


    用户名密码一定要大写。
     
    剩下的就不用管了。连不上的话会有各种提示的。
    核心方法读取录入数据
     
    public void Execute(RfcDestination prd)
            {
              
                RfcRepository SapRfcRepository = prd.Repository;
                IRfcFunction myfun = SapRfcRepository.CreateFunction("ZORDER_RFC");
                IRfcStructure import = null;
                IRfcTable table = myfun.GetTable("IN_ORDER");
                for (int i = 0; i < 3; i++)
                {
                    import = SapRfcRepository.GetStructureMetadata("ZORDERTEST").CreateStructure();
                    import.SetValue("ORDERID", i);
                    import.SetValue("ORDERCODE", DateTime.Now.ToString("yyyyMMdd"));
                    import.SetValue("ORDERTIME", DateTime.Now);
                    import.SetValue("ORDERUSER", "小李"+i);
                    table.Insert(import);
                }
                myfun.Invoke(prd); 
                string RETURNStr = myfun.GetString("R_SUBRC");
                MessageBox.Show(RETURNStr);
                string[] columns = new string[]{
                    "ORDERID",
                    "ORDERCODE",
                    "ORDERTIME",
                    "ORDERUSER"
                };
                DataTable dt = new DataTable();  
                foreach (string clmn in columns)
                {
                    dt.Columns.Add(clmn);
                }
                table = myfun.GetTable("IN_ORDER");
                for (int i = 0; i < table.RowCount; i++)
                {
                    DataRow dr = dt.NewRow();
                    foreach (string clmn in columns)
                    {
                        dr[clmn] = table[i].GetString(clmn);
                    }
                    dt.Rows.Add(dr);  
                }
                this.dataGridView1.DataSource = dt;
            }
    

    分析SapRfcRepository.CreateFunction("ZORDER_RFC"); 传入函数名称。
     myfun.GetTable("IN_ORDER");,是gettable,传的是参数名。
    SapRfcRepository.GetStructureMetadata("ZORDERTEST").CreateStructure();这传的是表名,
    myfun.GetString("R_SUBRC");接收返回的参数,应该是‘OK’,同样是参数名
       dr[clmn] = table[i].GetString(clmn);table是接口自定义的类型,跟踪看下结构,像个json。

    到星期一接口调通,还得学习SAP做单,表情如下大哭
  • 相关阅读:
    Django的中间件
    Django的Models(三)
    多个SSH key对应多个Host: Github, Bitbucket
    最简单的私有库方法
    Swift compile slow 编译慢问题
    Hide Xcode8 strange log.
    cocoapods 终极方案
    "Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)
    Xcode7下载地址
    Xcode8安装不成功, 需要升级系统. The operation couldn't be completed. cpio read error
  • 原文地址:https://www.cnblogs.com/shiworkyue/p/3845325.html
Copyright © 2011-2022 走看看