江湖浪人 发表于 2015-9-17 10:55:48

.NET调用SAP(RFC)

  public void nco()
      {
            
            //MyBackendConfig config = new MyBackendConfig();
            IDestinationConfiguration ID = new MyBackendConfig();
  RfcDestinationManager.RegisterDestinationConfiguration(ID);
  
            RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000");
            RfcDestinationManager.UnregisterDestinationConfiguration(ID);
  nco(prd);
  }
  
      public void nco(RfcDestination prd)
      {
  RfcRepository repo = prd.Repository;
  IRfcFunction companyBapi = repo.CreateFunction("Z_RFC_MB51N");   //调用函数名
  DateTime dt = DateTime.Today;
  companyBapi.SetValue("DATE",dt);   //设置Import的参数
  companyBapi.Invoke(prd);   //执行函数
  IRfcTable table = companyBapi.GetTable("IT_MB51");//获取相应的品号内表
            //DataTable mb51 = new DataTable();//新建表格
  
  try
            {
                SqlConnection conn = new SqlConnection("server=192.168.127.11;uid=sa;pwd=*****;database=MOLD;");
                string matnr;
                string lgort;
                string bwart;
                string mblnr;
                string ebeln;
                string lifnr;
                string aufnr;
                string sobkz;
                string kdauf;
                float menge;
                float dmbtr;
                for (int i = 0; i < table.RowCount; i++)
                {
                  table.CurrentIndex = i;
                  matnr = table.CurrentRow.GetString("MATNR");
                  lgort = table.CurrentRow.GetString("LGORT");
                  bwart = table.CurrentRow.GetString("BWART");
                  mblnr = table.CurrentRow.GetString("MBLNR");
                  ebeln = table.CurrentRow.GetString("EBELN");
                  lifnr = table.CurrentRow.GetString("LIFNR");
                  aufnr = table.CurrentRow.GetString("AUFNR");
                  sobkz = table.CurrentRow.GetString("SOBKZ");
                  kdauf = table.CurrentRow.GetString("KDAUF");
                  menge=float.Parse( table.GetString("MENGE"));
                  dmbtr=float.Parse( table.GetString("DMBTR"));
                     
                  conn.Open();
                  SqlCommand comm;
                  string select = "select * from dbo.rfc where Matnr='"+ matnr +"'";
                  comm = new SqlCommand(select, conn);
                  int j =Convert.ToInt32(comm.ExecuteScalar());
                  if (j != 0)
                  {
                        string s = "update dbo.rfc set = + '" + menge + "',LocalCurrency=LocalCurrency + '" + dmbtr + "' where Matnr='" + dmbtr + "'";
                        comm = new SqlCommand(s, conn);
                        comm.ExecuteNonQuery();
                  }
                  else
                  {
                        string s = "insert into dbo.rfcvalues ('" + matnr + "','" + lgort + "','" + bwart + "','" + mblnr + "','" + ebeln + "','" + lifnr + "','" + aufnr + "','" + sobkz + "','" + kdauf + "','" + menge + "','" + dmbtr + "')";
                        comm = new SqlCommand(s, conn);
                        comm.ExecuteNonQuery();
                  }
                  conn.Close();
                }
               
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
               
            }
  prd = null;
  repo = null;
         
  }
  public class MyBackendConfig : IDestinationConfiguration
      {
  public RfcConfigParameters GetParameters(String destinationName)
            {
  if ("PRD_000".Equals(destinationName))
                {
  RfcConfigParameters parms = new RfcConfigParameters();
  parms.Add(RfcConfigParameters.AppServerHost, "192.168.5.55");   //SAP主机IP
  parms.Add(RfcConfigParameters.SystemNumber, "PRD");//SAP实例
  parms.Add(RfcConfigParameters.User, "RFCUSER");//用户名
  parms.Add(RfcConfigParameters.Password, "1234");//密码
  parms.Add(RfcConfigParameters.Client, "888");// Client
  parms.Add(RfcConfigParameters.Language, "ZF");//登陆语言
  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;
  }
      #endregion
  
      public void Form1_Load(object sender, EventArgs e)
      {
            nco();
  //System.Threading.Thread.Sleep(2000);
         
            Application.Exit();
      }
页: [1]
查看完整版本: .NET调用SAP(RFC)