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

[经验分享] C# 连接SAP

[复制链接]

尚未签到

发表于 2015-9-17 10:13:02 | 显示全部楼层 |阅读模式
  从前曾经尝试在EXCEL中使用com 来调用SAP的RFC、ABAP函数来获取数据。可是非常不方便,特别是在往RFC函数中传递参数非常困难。
  今天尝试在C#中通过.net connector调用SAP中RFC、BAPI函数。
  
  1需要用到一个工具:SAP RFC Proxy Builder .它的主要工作就是生成特定RFC、BAPI函数.net connector 的代理类。这个工具是韩文的,不过不影响使用。
  
  2.第一步设置登陆设置。这跟平常的登陆设置是一样的。
DSC0000.png
  3.成功登陆后就可以点击上面的按钮获取服务器中的函数列表,在左边可以进行名字的筛选。选择需要的函数名,再点击下一步。
DSC0001.png
  
  
  4.可以修改命名空间与类名。选择存放文件夹。再点击最大的按键,直接生成类库。
DSC0002.png
  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查看 DSC0003.png

运维网声明 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-114828-1-1.html 上篇帖子: SAP顾问心得 下篇帖子: SAP Ecc6破解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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