设为首页 收藏本站
查看: 2063|回复: 0

[经验分享] C# 调用 SAP RFC 方法

[复制链接]

尚未签到

发表于 2015-9-20 11:59:20 | 显示全部楼层 |阅读模式
C# 调用 SAP RFC 方法


原文地址:C#调用SAP函数之RFC_READ_TABLE作者:天壤的劫火
  public void test()
  {
  SAPLogonControlClass connctl = new SAPLogonControlClass();
  //下面的参数值根据实际情况赋值                        connctl.Client = "集团号";             connctl.Language = "ZH";             connctl.ApplicationServer = "服务器IP";             connctl.SystemNumber = 00;             connctl.User = "SAP登录名";             connctl.Password = "SAP密码";
  Connection conn = (Connection)connctl.NewConnection();             //登陆             if (conn.Logon(null, true))             {                 SAPFunctionsClass functions = new SAPFunctionsClass();                 functions.Connection = conn;
  //这里就传入函数名称RFC_READ_TABLE                 Function fucntion = (Function)functions.Add("RFC_READ_TABLE");
  //这里是传入值参数  QUERY_TABLE 就是要查询的表名 DELIMITER就是字段间的间隔符号,因为函数的返回参数不是表格形式                 Parameter parameter1 = (Parameter)fucntion.get_Exports("QUERY_TABLE");                 parameter1.Value = "BSEG";                 Parameter parameter2 = (Parameter)fucntion.get_Exports("DELIMITER");                 parameter2.Value = "@";
  //这里是传入表的参数,这里有两个表OPTIONS和FIELDS;OPTION表是存放查询条件的,为空的话是不限制条件,FIELDS是存放你想要查询的字段,按理说可以为空,但是试过不行,只能设置要取的字段                 Tables Tables1 = (Tables)fucntion.Tables;
  Table table0 = (Table)Tables1.get_Item("OPTIONS");                 table0.AppendGridData(1, 1, 1, "");//设置条件,例如(MANDT=‘100’)
  Table talble1 = (Table)Tables1.get_Item("FIELDS");                 talble1.AppendGridData(1, 1, 1, "MANDT");//                      talble1.AppendGridData(2, 1, 1, "BUKRS");//                 talble1.AppendGridData(3, 1, 1, "BELNR");//                             talble1.AppendGridData(4, 1, 1, "GJAHR");//                 talble1.AppendGridData(5, 1, 1, "BUZEI");//
  talble1.AppendGridData(1, 2, 1, "SHKZG");//
  talble1.AppendGridData(2, 2, 1, "MENGE");//                 talble1.AppendGridData(3, 2, 1, "MEINS");//                 talble1.AppendGridData(4, 2, 1, "EBELN");//
  talble1.AppendGridData(5, 2, 1, "EBELP");//
  //调用函数,并读取数据                 if (fucntion.Call())                 {                     Tables1 = (Tables)fucntion.Tables;
  //获取函数返回内容                     Table talbe2 = (Table)Tables1.get_Item("DATA");
  MessageBox.Show(talbe2.get_cell(1,1).ToString());
  或者
  MessageBox.Show(talbe2.get_cell(1,"MANDT").ToString());                   }             //退出登陆             conn.Logoff();         }

原文地址:C# 调用 SAP RFC 方法作者:Danny
  C# 调用 SAP RFC 方法 收藏 添加SAP安装程序的四个dll文件引用:
  Interop.SAPBAPIControlLib.dll Interop.SAPFunctionsOCX.dll Interop.SAPLogonCtrl.dll Interop.SAPTableFactoryCtrl.dll
  调用方法体:
  private void GetMateriel()     {         string number = this.txtNumber.Text.Trim();         string desc = this.txtDesc.Text.Trim();
  Config config = new Config();         SAPLogonCtrl.SAPLogonControlClass login = new SAPLogonCtrl.SAPLogonControlClass();
  login.ApplicationServer = config.Server;         login.Client = config.Client;         login.Language = config.Language;         login.User = config.User;         login.Password = config.Password;         login.SystemNumber = config.Number;
  SAPLogonCtrl.Connection conn = (SAPLogonCtrl.Connection)login.NewConnection();         DataSet ds = new DataSet();         DataTable table = new DataTable();         table.Columns.Add("Number", typeof(string));         table.Columns.Add("Desc1", typeof(string));         table.Columns.Add("Desc2", typeof(string));         table.Columns.Add("Desc3", typeof(string));         table.Columns.Add("Uint", typeof(string));
  if (conn.Logon(0, true))         {             SAPFunctionsOCX.SAPFunctionsClass func = new SAPFunctionsOCX.SAPFunctionsClass();             func.Connection = conn;
  SAPFunctionsOCX.IFunction ifunc = (SAPFunctionsOCX.IFunction)func.Add("Z_MATERIAL_APPLICATION"); //(Z_MATERIAL_APPLICATION) SAP RFC 名称
  SAPFunctionsOCX.IParameter gclient = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("I_WERKS"); //(I_WERKS)输入参数             gclient.Value = Factory; //(Factory)对参数赋值
  SAPFunctionsOCX.IParameter matnr = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("I_MATNR");             matnr.Value = number;
  SAPFunctionsOCX.IParameter maktx = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("I_MAKTX");             maktx.Value = desc;
  ifunc.Call();             SAPTableFactoryCtrl.Tables tables = (SAPTableFactoryCtrl.Tables)ifunc.Tables;             SAPTableFactoryCtrl.Table ENQ = (SAPTableFactoryCtrl.Table)tables.get_Item("PO_TAB"); (PO_TAB)输出表名
  for (int i = 1; i <= ENQ.RowCount; i++)             {                 DataRow dr = table.NewRow();                 dr[0] = ENQ.get_Cell(i, "MATNR");                 dr[1] = ENQ.get_Cell(i, "MAKTX");                 dr[2] = ENQ.get_Cell(i, "MAKTX2");                 dr[3] = ENQ.get_Cell(i, "MAKTX3");                 dr[4] = ENQ.get_Cell(i, "MEINS");                 table.Rows.Add(dr);             }
  ds.Tables.Add(table);         }         conn.Logoff();
  this.Repeater1.DataSource = ds.Tables[0];         this.DataBind();         this.lblCount.Text = "共找到" + ds.Tables[0].Rows.Count.ToString() + "條記錄";         ScriptManager.RegisterStartupScript(btnSAP, this.GetType(), "", "$(document).ready( function (){ jQuery.page('page',10);} )", true);     }
  本文来自CSDN博客,转载请标明出处:http://blog.iyunv.com/robaot/archive/2009/10/20/4704127.aspx
  
  
  另一篇:C# 连接SAP,并调用RFC函数 (基于Com组件) 收藏 1) 新建工程后,首先添加3个Com组建的引用,分别为 SAPFunctionsOCX,SAPLogonCtrl,SAPTableFactoryCtrl; 2) 项目添加引用 using SAPFunctionsOCX; using SAPLogonCtrl; using SAPTableFactoryCtrl; 3) 连接并调用RFC             SAPLogonControlClass connctl = new SAPLogonControlClass();             //下面的参数值根据实际情况赋值             connctl.Client = "200";             connctl.Language = "EN";             connctl.ApplicationServer = "xxx.xxx.xxx.xxx";//Application server IP             connctl.SystemNumber = 00;             connctl.User = "XXXX";             connctl.Password = "XXXXXXX";
  Connection conn = (Connection)connctl.NewConnection();             //登陆             if (conn.Logon(null,true))             {                 MessageBox.Show("Successful");             }                          SAPFunctionsClass functions = new SAPFunctionsClass();             functions.Connection = conn;             //这里就可以传入Function Name             Function fucntion = (Function)functions.Add("RFC_READ_TABLE");。             //这里是传入值参数             Parameter parameter1 = (Parameter)fucntion.get_Exports("QUERY_TABLE");             parameter1.Value = "VEKP";             Parameter parameter2 = (Parameter)fucntion.get_Exports("DELIMITER");             parameter2.Value = ";";             //这里是传入表的参数,这里有两个表OPTIONS和FIELDS             Tables Tables1 = (Tables)fucntion.Tables;             Table table0 = (Table)Tables1.get_Item("OPTIONS");             table0.AppendGridData(1, 1, 1, "EXIDV = '00000000001000000022'");             Table talble1 = (Table)Tables1.get_Item("FIELDS");             talble1.AppendGridData(1, 1, 1, "VENUM");             talble1.AppendGridData(2, 1, 1, "VPOBJKEY");             talble1.AppendGridData(3, 1, 1, "VSTEL");             //调用函数,并读取数据             if (fucntion.Call())             {                 Tables1 = (Tables)fucntion.Tables;                 Table talbe2 = (Table)Tables1.get_Item("DATA");                 MessageBox.Show(talbe2.get_Cell(1, 1).ToString());             }             //退出登陆             conn.Logoff();
  本文来自CSDN博客,转载请标明出处:http://blog.iyunv.com/superying/archive/2009/12/10/4977062.aspx
  
c# 調用sap rfc - [abap开发]

  版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://qiqeloveyou.blogbus.com/logs/75375580.html
  1.C#与数据库访问技术:http://wenku.baidu.com/view/e590c268a98271fe910ef99e.html
  2.实现用C#向SAP内表和结构写入数据
  appenddatagrid可以替代set_Cell
  SAPLogonCtrl.SAPLogonControlClass SapLogon = new SAPLogonCtrl.SAPLogonControlClass(); SapLogon.Client = "800"; SapLogon.Language = "ZH"; SapLogon.User = "";//R3登陆用户名 SapLogon.Password = "";//登陆密码 SapLogon.ApplicationServer = "";//r3服务器 SapLogon.SystemNumber = 0; //以下建立与R3的通信机制     SAPLogonCtrl.Connection EnterSap = (SAPLogonCtrl.Connection)SapLogon.NewConnection();//建立连接 if (EnterSap.Logon(0, true) == false) { MessageBox.Show("no"); //this.Label1.Text = "aa"; } else { MessageBox.Show("yes"); //this.Label1.Text = "bb"; }
SAPFunctionsOCX.SAPFunctionsClass sapfc = new SAPFunctionsOCX.SAPFunctionsClass();         
SAPFunctionsOCX.IFunction sapfu = (SAPFunctionsOCX.IFunction)sapfc.Add("ZOA_UPDATE_PARKED_DOC_ZS"); sapfc.Connection = EnterSap;
SAPFunctionsOCX.IStructure stru = (SAPFunctionsOCX.IStructure)sapfu.get_Exports("zyztt");         
stru.set_Value("bldat", "20070205"); stru.set_Value("BUDAT", "20070205"); stru.set_Value("BLART","SA"); stru.set_Value("BUKRS","4100"); stru.set_Value("WAERS","RMB");
           SAPTableFactoryCtrl._CSAPTaFacTables impor = (SAPTableFactoryCtrl._CSAPTaFacTables)sapfu.Tables; SAPTableFactoryCtrl._CSAPTaFacTable partable = (SAPTableFactoryCtrl._CSAPTaFacTable)impor.get_Item("ZYZHXM");
partable.AppendRow();
int i=1; partable.set_Cell(i,"NEWKO",55032500); partable.set_Cell(i,"NEWBS","40");//执行到这里出现错 误:未处理的“System.Runtime.InteropServices.COMException”类型的异常出现在 mscorlib.dll 中。其他信息: 非选择性的参数。                                 MessageBox.Show(partable.get_Cell(i,1).ToString());  使用set_Cell地確會出現異常 但是用appenddatagrid可以替代上面用法,本人調用成工            partable.set_Value(i,"KOSTL","J0"); partable.set_Value(i,"WRBTR","40"); partable.set_Value(i,"SGTXT","11月费用");            partable.AppendRow(); i++; partable.set_Value(i,"NEWBS","50");            partable.set_Value(i,"NEWKO","10010100"); partable.set_Value(i,"ZZCASH","A92"); partable.set_Value(i,"WRBTR","40"); partable.set_Value(i,"SGTXT","11月费用");
sapfu.Call();
EnterSap.Logoff();

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-116209-1-1.html 上篇帖子: SAP客户合作伙伴关系使用说明 下篇帖子: SAP生产计划(PP)名词解释
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表