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

[经验分享] .net连接SAP的几种方式

[复制链接]

尚未签到

发表于 2015-9-20 10:31:25 | 显示全部楼层 |阅读模式


  .net连接SAP的几种方式
  一、 SAP .net connector
  这是SAP专为.net连接开发的一个工具,简单方便,但是只支持VS2003.当然想在VS2003以上的版本使用可以选择在VS2003上包装下再用。
  使用方法:
  1.首先安装SAP .net connector,一路next即可
  2.打开VS2003,新建一个项目,打开server explorer,你会发现多了一个SAP的server图标(如果没有,点击服务器浏览器的刷新按钮即可),添加一个服务器,设置方式选择”自定义登录方式”,然后配置用户名,密码,服务器地址,客户端等
DSC0000.jpg DSC0001.jpg DSC0002.jpg
  3.配置完毕后会出现一个SAP服务器,展开,在选择“Functions”节点,添加一个filter,过滤下,以免该用户名下的RFC太多。添加完毕后会出现一个RFC
  4.在项目上新建一个SAP Connectot proxy,并设置其属性如下图
DSC0003.jpg DSC0004.jpg
  5.将RFC拖到该proxy上
  6.开始编码
  C# Code
  SAP.Connector.Destination destination = new SAP.Connector.Destination();
  destination.Username = "PULLSYSTEM"; // SAP username
  destination.Password = "npullpwd"; // SAP username's password
  destination.AppServerHost = "hksapecc"; // SAP application server's ip number or id
  estination.Client = 800; // Client number
  destination.SystemNumber = 0; // application server system number
  SAP.Connector.SAPConnection sapConnection = new SAP.Connector.SAPConnection(destination);
  SAPProxy1 proxy = new SAPProxy1();
  proxy.Connection = sapConnection;
  proxy.Z_RFC_PO_INF(strPO,strPoItem,out strPRPO,out strI2PRPO,
  out strPRItemPO,out strBuyerCodePO,out strBuyerNamePO,
  out E_INSMK,out strCostCenterPO,out strSlocPO,out strVendorPO,
  out strPartNOPO,out strUnitPO,out strQtyPO,out strPricePO,
  out E_PSTYP,out strGLPO,out strPlantPO,out E_ZPMAT);
  proxy.Connection.Close();
  二、 是用SAP客户端,调用com组件连接SAP
  使用方法:
  1. 引用一下组件:
DSC0005.jpg
  2. 开始编码
  C# Code
  private void trytoconnectSAP()
  {
  try
  {
  SAPLogonCtrl.SAPLogonControlClass logon = new SAPLogonCtrl.SAPLogonControlClass();
  logon.ApplicationServer = "10.10.209.164"; //SAP system's IP
  logon.Client = "800"; //SAP system'client
  logon.Language = "EN";
  logon.User = "PULLSYSTEM"; //Username
  logon.Password = "npullpwd"; //Password
  logon.SystemNumber = 00; //System number
  SAPLogonCtrl.Connection conn = (SAPLogonCtrl.Connection)logon.NewConnection();
  if (conn.Logon(0, true))
  {
  SAPFunctionsOCX.SAPFunctionsClass func = new SAPFunctionsOCX.SAPFunctionsClass();
  func.Connection = conn;
  SAPFunctionsOCX.IFunction ifunc = (SAPFunctionsOCX.IFunction)func.Add("Z_RFC_PO_INF"); //Call Function module 'ENQUEUE_READ'
  SAPFunctionsOCX.IParameter gclient = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("L_EBELN"); //Get the import paremeter
  gclient.Value = strPONO; //"4500111574"; //Set value for import paremeter
  SAPFunctionsOCX.IParameter GUNAME = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("L_EBELP");
  GUNAME.Value = strPOITEM; //10
  ifunc.Call();
  SAPFunctionsOCX.IParameter Plant = (SAPFunctionsOCX.IParameter)ifunc.get_Imports("E_WERKS");
  string plant = Plant._Value.ToString();
  SAPFunctionsOCX.IParameter Sloc = (SAPFunctionsOCX.IParameter)ifunc.get_Imports("E_LGORT");
  string sloc = Sloc._Value.ToString();
  SAPFunctionsOCX.IParameter Qty = (SAPFunctionsOCX.IParameter)ifunc.get_Imports("E_MENGE");
  string qty = Qty._Value.ToString();
  conn.Logoff();
  strPO = plant + "/" + sloc + "/" + qty;
  }
  }
  catch (Exception ex)
  {
  strPO = ex.Message;
  }
  }
  注意,在asp.net下使用,必须用线程的技术进行调用,否则出错
  C# Code
  System.Threading.Thread s = new System.Threading.Thread(new System.Threading.ThreadStart(trytoconnectSAP)); //Create a new thread and set the method test() run in this thread
  s.SetApartmentState(System.Threading.ApartmentState.STA); //Set the run mode 'STA'
  s.Start(); //Start the thread
  s.Join();
  三、 使用Data Provider for mySAP Business Suite进行连接
  这个组件时在Biztalk上使用的,编码比较简单,但是需要用SAP的权限或者让人在SAP中传入两个RFC,这两个RFC的作用是收集和整理RFC,具体可以参看“自述文件”
  以下是代码片段
  C# Code
  public bool TryConnectSAPByProvider()
  {
  try
  {
  string strConn = System.Configuration.ConfigurationSettings.AppSettings["SAPConnstring"].ToString();
  SAPConnection con = new SAPConnection(strConn);//SAP服务器连接参数设置,
  con.Open();
  SAPCommand cmd = new SAPCommand(con);
  cmd.CommandText = "select * from Z_RFC_PO_INF where L_EBELN='9800031143' and L_EBELP='00010'";//执行远程RFC BAPI_CUSTOMER_GETLIST,执行RFC的参数传递过程参考下边的EXEC 语句的语法
  //以下为RFC调用参数赋值并指定Input、Output类型
  //SAPParameter param = new SAPParameter("@param", ParameterDirection.InputOutput);
  //DataTable dt = new DataTable();
  //dt.Columns.Add("SIGN");
  //dt.Columns.Add("OPTION");
  //dt.Columns.Add("LOW");
  //dt.Columns.Add("HIGH");
  //DataRow row = dt.NewRow();
  //row["LOW"] = 1;
  //row["HIGH"] = 1000;
  //dt.Rows.Add(row);
  //param.Value = dt;
  //cmd.Parameters.Add(param);//执行结果放在SAPDataReade中
  SAPDataReader dr = cmd.ExecuteReader(); //retrieving returned datareaders
  return true;
  }
  catch (Exception ex)
  {
  return false;
  }
  附件下载:SAP .net connect

运维网声明 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-116135-1-1.html 上篇帖子: SAP系统的模块分类 下篇帖子: 如何学好SAP——学好FI/CO是基础为什么要学FI/CO
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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