.NET

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

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

<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
</configuration>

代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using SAP.Middleware.Connector;
using System.IO; namespace RMBreakSync
{ //登陆SAP前的准备工作
public class MyBackendConfig : IDestinationConfiguration
{
public RfcConfigParameters GetParameters(String destinationName)
{
if ("PRD_xxx".Equals(destinationName))
{
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "10.**.**.***"); //SAP主机IP
parms.Add(RfcConfigParameters.SAPRouter, "/H/2*8.??.**.***/H/"); //SAP主机IP
parms.Add(RfcConfigParameters.SystemNumber, ""); //SAP实例
parms.Add(RfcConfigParameters.User, "xxx"); //用户名
parms.Add(RfcConfigParameters.Password, "xxx"); //密码
parms.Add(RfcConfigParameters.Client, ""); // Client
parms.Add(RfcConfigParameters.Language, "ZH"); //登陆语言
return parms;
}
else return null;
}
public bool ChangeEventsSupported()
{
return false;
}
public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged; public static bool IsAlive = false; private static RfcDestination _RfcDest = null;
/// <summary>
/// 获取验证票
/// </summary>
/// <returns></returns>
public static RfcDestination GetRfcDest()
{
if (_RfcDest == null || IsAlive==false)
{
lock (typeof(string))
{
if (_RfcDest == null || IsAlive == false)
{
IDestinationConfiguration ID = new MyBackendConfig();
RfcDestinationManager.RegisterDestinationConfiguration(ID);
RfcDestination prd = RfcDestinationManager.GetDestination("PRD_xxx");
RfcDestinationManager.UnregisterDestinationConfiguration(ID);
_RfcDest = prd;
IsAlive = true;
}
}
} return _RfcDest;
} } public class SAPWrap
{
/// <summary>
/// 更新服务器状态
/// </summary>
/// <param name="planId"></param>
/// <param name="batno"></param>
/// <param name="FGPartno"></param>
public static void UpdateServerStatus(List<p_prodplanImport> list)
{
var prd = MyBackendConfig.GetRfcDest();
RfcRepository repo = prd.Repository;
IRfcFunction companyBapi = repo.CreateFunction("ZTPP_TO_MFG_FLAG"); //调用函数名
IRfcTable rfcTable = companyBapi.GetTable("ITAB");
// companyBapi.SetValue("EX_WERKS", "3003"); //设置Import的参数 ,即:输入参数 //多行
foreach (var plan in list)
{
rfcTable.Insert();
rfcTable.CurrentRow.SetValue("PLANID", plan.PlanID);
rfcTable.CurrentRow.SetValue("FGPARTNO", plan.P8code);
rfcTable.CurrentRow.SetValue("BATNO", plan.batno.ToString());
rfcTable.CurrentRow.SetValue("FLAG", "X");
} companyBapi.Invoke(prd); //执行函数 } public static List<RMBreakImport> DownItems(p_prodplanImport plan)
{
var prd = MyBackendConfig.GetRfcDest();
RfcRepository repo = prd.Repository;
IRfcFunction companyBapi = repo.CreateFunction("ZTPP_TO_MFG_ITEM"); //调用函数名 IRfcTable rfcTable = companyBapi.GetTable("ITAB"); //单行
rfcTable.Insert();
rfcTable.CurrentRow.SetValue("PLANID", plan.PlanID);
rfcTable.CurrentRow.SetValue("FGPARTNO", plan.P8code);
rfcTable.CurrentRow.SetValue("BATNO", plan.batno.ToString().Trim()); companyBapi.Invoke(prd); //执行函数 IRfcTable table = companyBapi.GetTable("ZITEM"); //获取相应的品号内表 var list = new List<RMBreakImport>();
for (int i = ; i < table.RowCount; i++)
{
table.CurrentIndex = i; //当前内表的索引行 var item = new RMBreakImport();
item.PlanId = table.GetString("PLANID");
item.PlanId = item.PlanId.TrimStart("".ToCharArray()); item.FGpartno = table.GetString("FGPARTNO"); //前导零
item.FGpartno = item.FGpartno.TrimStart("".ToCharArray()); item.p_yw = table.GetString("P_YW");
item.p_FGName = table.GetString("P_FGNAME");
item.batno = decimal.Parse(table.GetString("BATNO"));
item.Poutput = table.GetDecimal("POUTPUT");
item.productdate =DateTime.Parse( table.GetString("ProductDate")).ToString("yyyy-MM-dd"); item.partno = table.GetString("PartNO");
item.partno = item.partno.TrimStart("".ToCharArray()); item.p_partnoName = table.GetString("P_PartNoName");
item.partnoqty = table.GetDecimal("PartNoQty");
item.partnototalqty = table.GetDecimal("PartNoTotalQty");
item.UM = table.GetString("UM");
item.p_brand = table.GetString("P_BRAND");
item.p_supplier = table.GetString("NORMT");
item.BreakDate =DateTime.Parse(table.GetString("BreakDate")).ToString("yyyy-MM-dd");
item.Breaker = table.GetString("BREAKER");
//设置默认值
item.TicketStatus = "已审核";
item.IsOut = "否";
item.p_type = string.Empty; list.Add(item); } return list;
} /// <summary>
/// 下载计划列表
/// </summary>
/// <returns></returns>
public static List<p_prodplanImport> DownPlan()
{
var prd = MyBackendConfig.GetRfcDest();
RfcRepository repo = prd.Repository;
IRfcFunction companyBapi = repo.CreateFunction("ZTPP_TO_MFG"); //调用函数名
companyBapi.SetValue("EX_WERKS", ""); //设置Import的参数 ,即:输入参数
companyBapi.Invoke(prd); //执行函数
string MAKTX = companyBapi.GetValue("EX_WERKS").ToString(); //获取字段 IRfcTable table = companyBapi.GetTable("ITAB"); //获取相应的品号内表 var list=new List<p_prodplanImport>(); for (int i = ; i < table.RowCount; i++)
{
table.CurrentIndex = i; //当前内表的索引行 var plan=new p_prodplanImport();
plan.PlanID = table.GetString("PLANID");
plan.PlanID = plan.PlanID.TrimStart("".ToArray());//前导零 plan.P8code = table.GetString("FGPartNO");
plan.P8code = plan.P8code.TrimStart("".ToArray());
plan.Pname = table.GetString("pname"); //计划名称
plan.PlanType = table.GetString("PlanType");
plan.Ppname = table.GetString("P_FGName");
plan.Psetting = table.GetString("PSetting");
if (plan.Psetting.Length > ) plan.Psetting = plan.Psetting.Substring(, );
plan.batno =decimal.Parse( table.GetString("batno"));
plan.P_yw = table.GetString("P_YW");
plan.Poutput = table.GetDecimal("Poutput");
plan.Pdate =DateTime.Parse( table.GetString("ProductDate")).ToString("yyyy-MM-dd"); //设置默认列 plan.Pweek1 = plan.Pdate;
plan.Pplanner = "";
plan.Pmanger = "";
plan.Pcheckreust = "通过";
plan.Pcheckdate = plan.Pdate;
plan.Ptype = "新制";
plan.Pday1 = plan.Poutput; list.Add(plan); } return list; } } }

 Java

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

 public static List<String> callRfcExample() {
// 获取RFC 对象
JCoFunction function = RfcManager.getFunction("xxxx_V1");
// 设置import 参数
JCoParameterList importParam = function.getImportParameterList();
importParam.setValue("I_WERKS", "www1"); JCoTable tablename = function.getTableParameterList().getTable("R_GSTRP");
tablename.deleteRow();
tablename.deleteAllRows();
tablename.clear();
tablename.firstRow(); tablename.appendRow();
tablename.firstRow(); tablename.setValue("SIGN", "I");
tablename.setValue("OPTION", "BT");
tablename.setValue("LOW", "2013-06-25");
tablename.setValue("HIGH", "2013-06-25");
// 执行RFC
RfcManager.execute(function); // 获取RFC返回的字段值
// JCoParameterList exportParam = function.getExportParameterList();
// String exParamA = exportParam.getString("field_A");
// String exParamB = exportParam.getString("field_B");
// 遍历RFC返回的表对象
List<String> list=new ArrayList<String>(); JCoTable tb = function.getTableParameterList().getTable("ZAFKO");
for (int i = ; i < tb.getNumRows(); i++) {
tb.setRow(i);
list.add(tb.getString("ORDER_NUMBER"));
System.out.println(tb.getString("ORDER_NUMBER"));
//System.out.println(tb.getString("field02"));
}
return list;
}

详细请参考这里: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. docker 远程rest api 访问配置

    Docker RestApi 的配置及使用 Centos Docker1.12 远程Rest api访问的配置方法 http restapiv1.24 docker sdk for python

  2. PorterDuff.Mode

    参考:http://weishu.me/2015/09/23/Xfermode-in-android/ Sa = Source alphaDa = Dest alphaSc = Source colo ...

  3. 3D角色渲染到2D界面上

    using UnityEngine; using System.Collections; using System.Collections.Generic; using Carrie.Net; usi ...

  4. ansible之感冒药

    Ansible简介安装 Ansible是一个综合的强大的管理工具,他可以对多台主机安装操作系统,并为这些主机安装不同的应用程序,也可以通知指挥这些主机完成不同的任务.查看多台主机的各种信息的状态等,a ...

  5. node中express的中间件之cookieParser

    cookieParser中间件用于获取web浏览器发送的cookie中的内容.在使用了cookieParser中间件后, 代表客户端请求的htto.IncomingMessage对象就具有了一个coo ...

  6. 谷歌强制厂商升级KitKat 仍无法改善安卓碎片化

    据一份泄露的内部文档显示,谷歌计划推出新的Android版本及设备审批条例,限制硬件制造商推出Android 4.4 KitKat以下的旧版本硬件,来改变平台碎片化现象.如果厂商一意孤行,继续推出搭载 ...

  7. [Oracle] 用python插入中文

    先替换字符串中的\x22 为双引号,\x0A为回车 str2 = '{\x22name\x22:\x22hao\x22 \x0A ,\x22os\x22:\x22other\x22 } print s ...

  8. openstack网络架构(nova-network/neutron)

    openstack网络体系中,网络技术没有创新,但用到的技术点非常庞杂,包括bridge.vlan.gre.vxlan.ovs.openflow.sdn.iptables等,当然这里不会做具体技术介绍 ...

  9. Python ord(char)

    Given a string of length one, return an integer representing the Unicode code point of the character ...

  10. svn关键词BASE, HEAD, COMMITTED, PREV的深入理解

    svn关键词BASE, HEAD, COMMITTED, PREV可以很方便用于日常操作中,但是很多人对他们的工作原理和方式不是太了解. 在这里我将使用用例,诠释他们的作用和意图. 先给出svn手册中 ...