SAP接口编程-Nco3.0系列01 : RfcDestination
2016-03-14 21:53
751 查看
进入新的系列:.net connector 3.0,简称Nco3.0。Nco3.0是SAP针对.net平台提供的编程接口,由nco1.0/nco2.0演变而来。如果使用.net平台编程,推荐使用nco3.0,3.0和之前1.0/2.0比较,不管是API还是架构,都重新设计过,也借鉴了Jco3.0的设计,所以相对来说比较成熟,给程序员提供更好的控制和方便性。
重新设计SAP连接的处理方法:nco3.0程序员不需要自己去管理与SAP的连接(Connection),不需要打开连接、关闭连接、对象销毁。所有这一切由.net connectior 3.0来管理。
增强对大交易数据(不是big data,是mass transactions或heavy load scenario)处理的能力
减少内存耗用
不绑定Visual Studio版本。
安装比较简单,其实就是解压,释放几个文件。我们在程序中主要使用sapnco.dll和sapnco_utils.dll这两个动态链接库。WIN7安装(32位),默认的路径是: C:\Program Files (x86)\SAP\SAP_DotNetConnector3。
2、NCO3.0的namespace: nco3.0的namesapce只有一个:SAPP.Middleware.Connector,要在class中导入这个namespace
RfcDestination对象的创建需要用RfcDestinationManager类的GetConnection方法,以保证只有一个Connection(单例模式)和安全:
// 方法一
public static RfcDestination GetDestination(RfcConfigParameters parameters);
// 方法二
public static RfcDestination GetDestination(string destinationName);
方法1使用RfcConfigParameters作为参数,这个参数包含必要的logon parameters。方法2使用一个字符串作为参数。必须定义一个类,实现IDestinationConfiguration接口,并实现IDestinationConfiguration接口的GetParameters()方法。在GetParameters方法中定义destinationName,RfcDestinationManager.GetDestination方法会自动调用GetParameters方法,获取其中的logon parameters。程序员可以在GetParameters方法中通过文件、UI界面多种方法填充logon parameters,从而赋予程序员较大的自由度,.net connector则保证连接的安全性。
单元测试
DestinationConfig.cs
将代码改写成这个样子,填充destinationName为ECC的logon parameters。
RfcDestinationUsingConfig.cs
在构造器中初始化RfcDestination,搞得这么复杂,主要就是安全原因。根据ECC这个destinationName,自动调用DestinationConfig类的GetParameters方法,获取logon parameters进行注册,然后进行管理。程序员呢,只需要关心destination就行。
单元测试:
Nco3.0的优点
更加稳定、健壮、安全。关于安全,后面会有相关介绍。重新设计SAP连接的处理方法:nco3.0程序员不需要自己去管理与SAP的连接(Connection),不需要打开连接、关闭连接、对象销毁。所有这一切由.net connectior 3.0来管理。
增强对大交易数据(不是big data,是mass transactions或heavy load scenario)处理的能力
减少内存耗用
不绑定Visual Studio版本。
.net connector 3.0下载和安装
下载地址: https://service.sap.com/connectors。安装比较简单,其实就是解压,释放几个文件。我们在程序中主要使用sapnco.dll和sapnco_utils.dll这两个动态链接库。WIN7安装(32位),默认的路径是: C:\Program Files (x86)\SAP\SAP_DotNetConnector3。
项目环境准备
1、项目添加引用:添加对sapnco.dll和sapnco_utils.dll的引用。2、NCO3.0的namespace: nco3.0的namesapce只有一个:SAPP.Middleware.Connector,要在class中导入这个namespace
using SAP.Middleware.Connector;
RfcDestination
RfcDestination代表后端SAP系统。之前SAP的接口技术对SAP系统一般使用Connection对象连接后端系统,nco3.0设计的一个重大改变就是程序员不用再关心SAP的连接,名称也体现了这一点,现在叫Destination了。RfcDestination对象的创建需要用RfcDestinationManager类的GetConnection方法,以保证只有一个Connection(单例模式)和安全:
// 方法一
public static RfcDestination GetDestination(RfcConfigParameters parameters);
// 方法二
public static RfcDestination GetDestination(string destinationName);
方法1使用RfcConfigParameters作为参数,这个参数包含必要的logon parameters。方法2使用一个字符串作为参数。必须定义一个类,实现IDestinationConfiguration接口,并实现IDestinationConfiguration接口的GetParameters()方法。在GetParameters方法中定义destinationName,RfcDestinationManager.GetDestination方法会自动调用GetParameters方法,获取其中的logon parameters。程序员可以在GetParameters方法中通过文件、UI界面多种方法填充logon parameters,从而赋予程序员较大的自由度,.net connector则保证连接的安全性。
示例一
文件:RfcDestinationDemo.csusing SAP.Middleware.Connector; namespace Nco01 { public class RfcDestinationDemo { private RfcConfigParameters GetConfigParams() { RfcConfigParameters configParams = new RfcConfigParameters(); // Name property is neccessary, otherwise, NonInvalidParameterException will be thrown configParams.Add(RfcConfigParameters.Name, "ECC"); configParams.Add(RfcConfigParameters.AppServerHost, "192.168.65.100"); configParams.Add(RfcConfigParameters.SystemNumber, "00"); // instance number configParams.Add(RfcConfigParameters.SystemID, "D01"); configParams.Add(RfcConfigParameters.User, "STONE"); configParams.Add(RfcConfigParameters.Password, "xxx"); configParams.Add(RfcConfigParameters.Client, "001"); configParams.Add(RfcConfigParameters.Language, "EN"); configParams.Add(RfcConfigParameters.PoolSize, "5"); configParams.Add(RfcConfigParameters.MaxPoolSize, "10"); configParams.Add(RfcConfigParameters.IdleTimeout, "30"); return configParams; } public RfcDestination GetDestination() { RfcConfigParameters configParams = this.GetConfigParams(); RfcDestination dest = RfcDestinationManager.GetDestination(configParams); return dest; } public void PingDestination() { RfcDestination destination = this.GetDestination(); destination.Ping(); } } }
单元测试
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Nco01; namespace UnitTestProject1 { [TestClass] public class TestRfcDestinationDemo { [TestMethod] public void TestPing() { RfcDestinationDemo rfc = new RfcDestinationDemo(); rfc.PingDestination(); } } }
示例二
定义一个类,实现IDestinationConfiguration接口,起始代码如下:DestinationConfig.cs
using System; using SAP.Middleware.Connector; namespace Nco01 { class DestinationConfig : IDestinationConfiguration { public bool ChangeEventsSupported() { throw new NotImplementedException(); } public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged; public RfcConfigParameters GetParameters(string destinationName) { throw new NotImplementedException(); } } }
将代码改写成这个样子,填充destinationName为ECC的logon parameters。
using System; using SAP.Middleware.Connector; namespace Nco01 { class DestinationConfig : IDestinationConfiguration { public bool ChangeEventsSupported() { return false; // 不支持ChangeEvent } public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged; public RfcConfigParameters GetParameters(string destinationName) { // get logon parameteres according to destinationName // the following is logon paramters for 'ECC' if ("ECC".Equals(destinationName)) { RfcConfigParameters configParams = new RfcConfigParameters(); configParams.Add(RfcConfigParameters.AppServerHost, "192.168.65.100"); configParams.Add(RfcConfigParameters.SystemNumber, "00"); // instance number configParams.Add(RfcConfigParameters.SystemID, "D01"); configParams.Add(RfcConfigParameters.User, "STONE"); configParams.Add(RfcConfigParameters.Password, "xxx"); configParams.Add(RfcConfigParameters.Client, "001"); configParams.Add(RfcConfigParameters.Language, "EN"); configParams.Add(RfcConfigParameters.PoolSize, "5"); configParams.Add(RfcConfigParameters.MaxPoolSize, "10"); configParams.Add(RfcConfigParameters.IdleTimeout, "30"); return configParams; } else { return null; } } } }
RfcDestinationUsingConfig.cs
using SAP.Middleware.Connector; namespace Nco01 { public class RfcDestUsingConfig { private RfcDestination destination; // initialize in constructor public RfcDestUsingConfig() { DestinationConfig destConfig = new DestinationConfig(); RfcDestinationManager.RegisterDestinationConfiguration(destConfig); destination = RfcDestinationManager.GetDestination("ECC"); } public RfcDestination GetConnection() { return destination; } public void PingDestination() { destination.Ping(); } } }
在构造器中初始化RfcDestination,搞得这么复杂,主要就是安全原因。根据ECC这个destinationName,自动调用DestinationConfig类的GetParameters方法,获取logon parameters进行注册,然后进行管理。程序员呢,只需要关心destination就行。
单元测试:
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Nco01; namespace UnitTestProject1 { [TestClass] public class TestRfcDestinationDemo { [TestMethod] public void TestPing() { RfcDestinationDemo rfc = new RfcDestinationDemo(); rfc.PingDestination(); } } }
相关文章推荐
- Problem E: C语言习题 等长字符串排序
- spring控制器
- Problem D: C语言习题 字符串比较
- java内置对象三
- Problem C: C语言习题 字符串长度
- Python之路,进程、线程、协程篇
- C++虚函数表
- 关于Python的惰性求值与惰性序列
- Qt 自定义控件应用QSS(setStyleSheet)设置由Q_PROPERTY设置的属性
- Delphi的String内存结构(够清楚) good
- Unix环境高级编程—进程控制(二)
- Python设计模式(6)-原型模式
- php 处理字段与数据库字段顺序不一致的 csv 文件
- 关于Emgu安装和使用中遇到的问题和解决办法
- Python自然语言处理系列之模拟退火算法
- 算数表达式求值C++实现
- java web中cookies的用法 转
- Java clone()
- HDU_ACM_A+B for Input-Output Practice (I)
- matlab sort()升序和降序