C# 连接SAP
时间:2010-08-26 来源:wwsheng
从前曾经尝试在EXCEL中使用com 来调用SAP的RFC、ABAP函数来获取数据。可是非常不方便,特别是在往RFC函数中传递参数非常困难。
今天尝试在C#中通过.net connector调用SAP中RFC、BAPI函数。
1需要用到一个工具:SAP RFC Proxy Builder .它的主要工作就是生成特定RFC、BAPI函数.net connector 的代理类。这个工具是韩文的,不过不影响使用。
2.第一步设置登陆设置。这跟平常的登陆设置是一样的。
3.成功登陆后就可以点击上面的按钮获取服务器中的函数列表,在左边可以进行名字的筛选。选择需要的函数名,再点击下一步。
4.可以修改命名空间与类名。选择存放文件夹。再点击最大的按键,直接生成类库。
5.在VS工程中引用生成的类库文件。一个测试程序
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using ProxyBuilder; using SAP.Connector; using SAP.Connector.Rfc; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.button1.Enabled = false; } //声明连接 SAP.Connector.Destination dest = new Destination(); //声明代理类 ProxyBuilder.SAPProxy proxy = new ProxyBuilder.SAPProxy(); private void btnConnect_Click(object sender, EventArgs e) { //这里是连接的具体参数,用过SAP的人都知道。。 dest.AppServerHost = ""; dest.Client = ; dest.Password = ""; dest.Username = ""; dest.SystemNumber = ; SAP.Connector.SAPConnection conn = new SAPConnection(dest); proxy.Connection = conn; try { proxy.Connection.Open(); this.button1.Enabled = true; } catch { MessageBox.Show("login failed"); proxy.Connection.Close(); } } private void button1_Click(object sender, EventArgs e) { //用来保存返回表,实际上这里返回的是一个结构Wa。 ProxyBuilder.TAB512Table tb512 = new TAB512Table(); //定义字段参数 RFC_DB_FLD fld=new RFC_DB_FLD(); RFC_DB_FLDTable tbfld=new RFC_DB_FLDTable(); fld.Fieldname = "BELNR"; tbfld.Add(fld); fld.Fieldname = "BUKRS "; tbfld.Add(fld); fld.Fieldname = "GJAHR "; tbfld.Add(fld); //可以指定条件参数 RFC_DB_OPT opt = new RFC_DB_OPT(); RFC_DB_OPTTable TBOPT=new RFC_DB_OPTTable(); try { //调用此函数来读取SAP中表数据。 //先解释一下RFC_READ_TABLE的参数: // importing: // QUERY_TABLE: 读取的表 // DELIMITER:字段之间的分隔符(当选择多个字段时) // NO_DATA:输入'X'时,不向传出表DATA输出数据 // ROWSKIPS:输出数据的第一条数据的行号(从0开始计) // ROWCOUNT:从ROWSKIPS开始,一共输出的数据行数(0代表所有数据) // Table: // OPTIONS:表查询条件,比如对MARA表来说,可以写MATNR = 'ABCD'。留空代表选择所有数据。 // FIELDS:输出的表字段。留空代表输出所有字段。 // DATA:输入的数据记录 // 其中第一个参数QUERY_TABLE应该是必输项,否则这次调用就无意义(不知道要选那个表啊!),函数返回TABLE_NOT_AVAILABLE错误。 // 调用字串中第一个参数是空字串。这应该是错误的原因。 // FIELDS参数实际允许空 proxy.RFC_READ_TABLE(",", "", "BKPF", 20, 0, ref tb512, ref tbfld, ref TBOPT); if (tb512.Count > 0) { //可以直接绑定数据控件。 dataGridView1.DataSource = tb512; } proxy.Connection.Close(); } catch (Exception ee) { MessageBox.Show(ee.Message); } } } }6.有关于RFC_READ_TABLE 有关的信息,可以通过SE80程序组SDTX查看
相关阅读 更多 +