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做单,表情如下大哭
原文地址:https://www.cnblogs.com/shiworkyue/p/3845325.html