.NET

环境
Xp(sp3) vs2010, win2003 EN 32bit(sp2)
winform,webform

引用sapnco.dll,sapnco_utils.dll(自动引用)
配置文件需要改成混合模式

  1. <?xml version="1.0"?>
  2. <configuration>
  3. <startup>
  4. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  5. </startup>
  6. <startup useLegacyV2RuntimeActivationPolicy="true">
  7. <supportedRuntime version="v4.0" />
  8. </startup>
  9. </configuration>

代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. using SAP.Middleware.Connector;
  7. using System.IO;
  8.  
  9. namespace RMBreakSync
  10. {
  11.  
  12. //登陆SAP前的准备工作
  13. public class MyBackendConfig : IDestinationConfiguration
  14. {
  15. public RfcConfigParameters GetParameters(String destinationName)
  16. {
  17. if ("PRD_xxx".Equals(destinationName))
  18. {
  19. RfcConfigParameters parms = new RfcConfigParameters();
  20. parms.Add(RfcConfigParameters.AppServerHost, "10.**.**.***"); //SAP主机IP
  21. parms.Add(RfcConfigParameters.SAPRouter, "/H/2*8.??.**.***/H/"); //SAP主机IP
  22. parms.Add(RfcConfigParameters.SystemNumber, ""); //SAP实例
  23. parms.Add(RfcConfigParameters.User, "xxx"); //用户名
  24. parms.Add(RfcConfigParameters.Password, "xxx"); //密码
  25. parms.Add(RfcConfigParameters.Client, ""); // Client
  26. parms.Add(RfcConfigParameters.Language, "ZH"); //登陆语言
  27. return parms;
  28. }
  29. else return null;
  30. }
  31. public bool ChangeEventsSupported()
  32. {
  33. return false;
  34. }
  35. public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
  36.  
  37. public static bool IsAlive = false;
  38.  
  39. private static RfcDestination _RfcDest = null;
  40. /// <summary>
  41. /// 获取验证票
  42. /// </summary>
  43. /// <returns></returns>
  44. public static RfcDestination GetRfcDest()
  45. {
  46. if (_RfcDest == null || IsAlive==false)
  47. {
  48. lock (typeof(string))
  49. {
  50. if (_RfcDest == null || IsAlive == false)
  51. {
  52. IDestinationConfiguration ID = new MyBackendConfig();
  53. RfcDestinationManager.RegisterDestinationConfiguration(ID);
  54. RfcDestination prd = RfcDestinationManager.GetDestination("PRD_xxx");
  55. RfcDestinationManager.UnregisterDestinationConfiguration(ID);
  56. _RfcDest = prd;
  57. IsAlive = true;
  58. }
  59. }
  60. }
  61.  
  62. return _RfcDest;
  63. }
  64.  
  65. }
  66.  
  67. public class SAPWrap
  68. {
  69. /// <summary>
  70. /// 更新服务器状态
  71. /// </summary>
  72. /// <param name="planId"></param>
  73. /// <param name="batno"></param>
  74. /// <param name="FGPartno"></param>
  75. public static void UpdateServerStatus(List<p_prodplanImport> list)
  76. {
  77. var prd = MyBackendConfig.GetRfcDest();
  78. RfcRepository repo = prd.Repository;
  79. IRfcFunction companyBapi = repo.CreateFunction("ZTPP_TO_MFG_FLAG"); //调用函数名
  80. IRfcTable rfcTable = companyBapi.GetTable("ITAB");
  81. // companyBapi.SetValue("EX_WERKS", "3003"); //设置Import的参数 ,即:输入参数
  82.  
  83. //多行
  84. foreach (var plan in list)
  85. {
  86. rfcTable.Insert();
  87. rfcTable.CurrentRow.SetValue("PLANID", plan.PlanID);
  88. rfcTable.CurrentRow.SetValue("FGPARTNO", plan.P8code);
  89. rfcTable.CurrentRow.SetValue("BATNO", plan.batno.ToString());
  90. rfcTable.CurrentRow.SetValue("FLAG", "X");
  91. }
  92.  
  93. companyBapi.Invoke(prd); //执行函数
  94.  
  95. }
  96.  
  97. public static List<RMBreakImport> DownItems(p_prodplanImport plan)
  98. {
  99. var prd = MyBackendConfig.GetRfcDest();
  100. RfcRepository repo = prd.Repository;
  101. IRfcFunction companyBapi = repo.CreateFunction("ZTPP_TO_MFG_ITEM"); //调用函数名
  102.  
  103. IRfcTable rfcTable = companyBapi.GetTable("ITAB");
  104.  
  105. //单行
  106. rfcTable.Insert();
  107. rfcTable.CurrentRow.SetValue("PLANID", plan.PlanID);
  108. rfcTable.CurrentRow.SetValue("FGPARTNO", plan.P8code);
  109. rfcTable.CurrentRow.SetValue("BATNO", plan.batno.ToString().Trim());
  110.  
  111. companyBapi.Invoke(prd); //执行函数
  112.  
  113. IRfcTable table = companyBapi.GetTable("ZITEM"); //获取相应的品号内表
  114.  
  115. var list = new List<RMBreakImport>();
  116. for (int i = ; i < table.RowCount; i++)
  117. {
  118. table.CurrentIndex = i; //当前内表的索引行
  119.  
  120. var item = new RMBreakImport();
  121. item.PlanId = table.GetString("PLANID");
  122. item.PlanId = item.PlanId.TrimStart("".ToCharArray());
  123.  
  124. item.FGpartno = table.GetString("FGPARTNO"); //前导零
  125. item.FGpartno = item.FGpartno.TrimStart("".ToCharArray());
  126.  
  127. item.p_yw = table.GetString("P_YW");
  128. item.p_FGName = table.GetString("P_FGNAME");
  129. item.batno = decimal.Parse(table.GetString("BATNO"));
  130. item.Poutput = table.GetDecimal("POUTPUT");
  131. item.productdate =DateTime.Parse( table.GetString("ProductDate")).ToString("yyyy-MM-dd");
  132.  
  133. item.partno = table.GetString("PartNO");
  134. item.partno = item.partno.TrimStart("".ToCharArray());
  135.  
  136. item.p_partnoName = table.GetString("P_PartNoName");
  137. item.partnoqty = table.GetDecimal("PartNoQty");
  138. item.partnototalqty = table.GetDecimal("PartNoTotalQty");
  139. item.UM = table.GetString("UM");
  140. item.p_brand = table.GetString("P_BRAND");
  141. item.p_supplier = table.GetString("NORMT");
  142. item.BreakDate =DateTime.Parse(table.GetString("BreakDate")).ToString("yyyy-MM-dd");
  143. item.Breaker = table.GetString("BREAKER");
  144. //设置默认值
  145. item.TicketStatus = "已审核";
  146. item.IsOut = "否";
  147. item.p_type = string.Empty;
  148.  
  149. list.Add(item);
  150.  
  151. }
  152.  
  153. return list;
  154. }
  155.  
  156. /// <summary>
  157. /// 下载计划列表
  158. /// </summary>
  159. /// <returns></returns>
  160. public static List<p_prodplanImport> DownPlan()
  161. {
  162. var prd = MyBackendConfig.GetRfcDest();
  163. RfcRepository repo = prd.Repository;
  164. IRfcFunction companyBapi = repo.CreateFunction("ZTPP_TO_MFG"); //调用函数名
  165. companyBapi.SetValue("EX_WERKS", ""); //设置Import的参数 ,即:输入参数
  166. companyBapi.Invoke(prd); //执行函数
  167. string MAKTX = companyBapi.GetValue("EX_WERKS").ToString(); //获取字段
  168.  
  169. IRfcTable table = companyBapi.GetTable("ITAB"); //获取相应的品号内表
  170.  
  171. var list=new List<p_prodplanImport>();
  172.  
  173. for (int i = ; i < table.RowCount; i++)
  174. {
  175. table.CurrentIndex = i; //当前内表的索引行
  176.  
  177. var plan=new p_prodplanImport();
  178. plan.PlanID = table.GetString("PLANID");
  179. plan.PlanID = plan.PlanID.TrimStart("".ToArray());//前导零
  180.  
  181. plan.P8code = table.GetString("FGPartNO");
  182. plan.P8code = plan.P8code.TrimStart("".ToArray());
  183. plan.Pname = table.GetString("pname"); //计划名称
  184. plan.PlanType = table.GetString("PlanType");
  185. plan.Ppname = table.GetString("P_FGName");
  186. plan.Psetting = table.GetString("PSetting");
  187. if (plan.Psetting.Length > ) plan.Psetting = plan.Psetting.Substring(, );
  188. plan.batno =decimal.Parse( table.GetString("batno"));
  189. plan.P_yw = table.GetString("P_YW");
  190. plan.Poutput = table.GetDecimal("Poutput");
  191. plan.Pdate =DateTime.Parse( table.GetString("ProductDate")).ToString("yyyy-MM-dd");
  192.  
  193. //设置默认列
  194.  
  195. plan.Pweek1 = plan.Pdate;
  196. plan.Pplanner = "";
  197. plan.Pmanger = "";
  198. plan.Pcheckreust = "通过";
  199. plan.Pcheckdate = plan.Pdate;
  200. plan.Ptype = "新制";
  201. plan.Pday1 = plan.Poutput;
  202.  
  203. list.Add(plan);
  204.  
  205. }
  206.  
  207. return list;
  208.  
  209. }
  210.  
  211. }
  212.  
  213. }

 Java

使用JCO,jco里面有4个版本,需要选择正确的版本,测试Jco是否正确可以使用 java -jar d:\jco\sapjco3.jar ,如果没有报错表示正常了

  1. public static List<String> callRfcExample() {
  2. // 获取RFC 对象
  3. JCoFunction function = RfcManager.getFunction("xxxx_V1");
  4. // 设置import 参数
  5. JCoParameterList importParam = function.getImportParameterList();
  6. importParam.setValue("I_WERKS", "www1");
  7.  
  8. JCoTable tablename = function.getTableParameterList().getTable("R_GSTRP");
  9. tablename.deleteRow();
  10. tablename.deleteAllRows();
  11. tablename.clear();
  12. tablename.firstRow();
  13.  
  14. tablename.appendRow();
  15. tablename.firstRow();
  16.  
  17. tablename.setValue("SIGN", "I");
  18. tablename.setValue("OPTION", "BT");
  19. tablename.setValue("LOW", "2013-06-25");
  20. tablename.setValue("HIGH", "2013-06-25");
  21. // 执行RFC
  22. RfcManager.execute(function);
  23.  
  24. // 获取RFC返回的字段值
  25. // JCoParameterList exportParam = function.getExportParameterList();
  26. // String exParamA = exportParam.getString("field_A");
  27. // String exParamB = exportParam.getString("field_B");
  28. // 遍历RFC返回的表对象
  29. List<String> list=new ArrayList<String>();
  30.  
  31. JCoTable tb = function.getTableParameterList().getTable("ZAFKO");
  32. for (int i = ; i < tb.getNumRows(); i++) {
  33. tb.setRow(i);
  34. list.add(tb.getString("ORDER_NUMBER"));
  35. System.out.println(tb.getString("ORDER_NUMBER"));
  36. //System.out.println(tb.getString("field02"));
  37. }
  38. return list;
  39. }

详细请参考这里:http://www.cnblogs.com/geun/archive/2012/11/12/2765793.html#2714359

另外win2003,32或64 bit的需要安装对应的
Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package (KB973544)
话说win2003,32bit上安装了七把次都没成功:(

//============

完成代码参考网盘内容

访问SAP的RFC的更多相关文章

  1. 用JavaScript访问SAP云平台上的服务遇到跨域问题该怎么办

    关于JavaScript的跨域问题(Cross Domain)的讨论, 网上有太多的资源了.国内的程序猿写了非常多的优秀文章,Jerry这里就不再重复了. 直入主题,最近我正在做一个原型开发:通过SA ...

  2. 访问SAP的Domain的Value Range

    访问Domain的Value Range有两种方法: 1.直接访问表 dd07l和dd07T     select * from dd07l            where domname   = ...

  3. 如何实现SAP的RFC函数调用(原创)

    连接sap系统需要通过sap javaconnect来连接,对于sapjco.jar系列文件有32位与64位之分[32位用的JAR版本是 2.1.10 (2011-05-10) ,64位用的JAR版本 ...

  4. SAP 调用RFC 的时候记录异常报错方式

    DATA: lv_error TYPE char100. CALL FUNCTION 'ZRFC_WM_ZEL001' DESTINATION lv_desc EXPORTING process_fl ...

  5. SAP ABAP RFC接口通用日志工具:abap fm logger

    很早之前就想写个能记录函数模块日志的通用工具,最早尝试时,没有想清楚插入代码的体积问题.在一些群友的提醒下,了解到可以用宏来处理这一问题.不过当时比较忙,就没有动笔.最近又想起这件事,花了2天完成了一 ...

  6. RfcDestinationManager.UnregisterDestinationConfiguration时报错cannot unregister the given destination configuration

    在使用NCO访问SAP的RFC时,我的程序代码是这么写的: string destinationName = "EWM_700_GROUP"; IDestinationConfig ...

  7. SAP学习日志--RFC REMOTE FUNCTION CALL

    RFC  Remote function Call 远程功能调用, 是SAP系统之间以及非SAP系统之间程序通信的基本接口技术. 例如BAPI , ALE都是基于RFC实现的 SAP系统提供了三种外部 ...

  8. 一个完整的SAP RFC调用接口封装

    因为经常需要访问sap操作数据,就封装了一个类方便调用,运行条件需要安装sap客户端,在sap客户端安装之后会带有一个com接口,本接口就通过这个com访问sap,因为com的后期绑定问题故使用了vb ...

  9. .net 调用SAP RFC的几种方法

    转自:http://www.cherpservice.com/pub/newsdetail.asp?Newsid=3613 第一种方式采用SAP.net Connector: 最新版本是3.,不开源, ...

随机推荐

  1. ROS HTB限速失败原因分析和需注意事项

    要想做限速,必须要知道以下几点: 首先要知道自己要限制什么的速度,谁的速度,于是需要用的标记,即Mangle. 其次要知道怎么限速,是限制上传,还是下载? 最后要知道所做的限速是否成功,即需要知道如何 ...

  2. node中的require

    /*在node中,可以使用require()函数来加载模块. * require函数使用一个参数,参数值可以带有完整路径的模块的文件名,也可以为模块名.当使用node中提供的模块时,在require函 ...

  3. 解决 service iptables start 无法启动的问题

    解决方式: iptables -F  // 初始化iptables. service iptables save  // 保存 service iptables restart  // 重启

  4. php Reflection

    <?php function title($title, $name) { return sprintf("%s. %s\r\n", $title, $name); } $f ...

  5. python找寻合适的日志库logging Handler——Handler自定义实现

    最近在用python tornado开发一个app的服务端.投产的系统肯定需要包含日志功能,这里就自然想到了用python自带的logging库.   logging中日志内容的输出都交由Handle ...

  6. HALCON中的算子大全(中英对照)

    HALCON中的算子大全(中英对照) Chapter 1 :Classification1.1 Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训 ...

  7. SpringData

    1.什么是SpringData?Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库.Map-Reduce 框架.云数据服务等等:另外也包含对关 ...

  8. linux系统构架 - LB集群之LVS的DR设置

    在lvs的nat模式的基础上 1.清空ipvsadm规则 ipvsadm -C 查看 ipvsadm -ln 2.清空iptables规则 iptables -t nat -F 3.修改rs的网卡配置 ...

  9. UINavigation,UiView,ModalView Controller之间的关系

    如果当前是个VC,那么就太简单了,直接就可以push到下一个vc AddShopViewController *controller = [[AddShopViewController alloc] ...

  10. Django实现支付宝付款和微信支付

    支付宝支付和微信支付是当今互联网产品常用的功能,我使用Django Rest Framework实现了网页上支付宝支付和微信支付的一个通用服务,提供rpc接口给其他服务,包括获取支付宝支付页面url的 ...