网站界面要素,平台制作专业网站制作,华为云自助建站好不好,石家庄网页设计师培训班本篇博文不再重复ABAP调用外部服务器的基础#xff0c;只介绍 NCo3 开发的过程和要点。需要了解相关知识点的小伙伴们自行参考#xff1a;
SAP接口编程 之JCo3.0系列(06) - Jco服务器端编程 PyRFC 服务器端编程要点
创建项目
新建一个 Console 项目#xff0c;选择 .Net …本篇博文不再重复ABAP调用外部服务器的基础只介绍 NCo3 开发的过程和要点。需要了解相关知识点的小伙伴们自行参考
SAP接口编程 之JCo3.0系列(06) - Jco服务器端编程 PyRFC 服务器端编程要点
创建项目
新建一个 Console 项目选择 .Net Framework 平台。目前 NCo 3.1 不支持 .Net Core。 点击「Create」按钮完成项目的创建。
添加引用
SAP 已经对 NCo3.0 停止技术支持所以建议使用 3.1 版本。3.1 版可以从 SAP Connector for Microsoft .NET 下载但需要下载权限。在本文的源码中提供了 NCo3.1 的安装程序以方便没有下载权限的同学。
NCo3.1 安装之后 sapnco.dll 和 sapnco_utils.dll 位于不同的文件夹中。默认的位置为 因为我下载的是 64 位版本dll 文件在 GAC_64 文件夹下面。 配置
NCo3 需要登录 SAP 的配置和以及 RFC 服务器的配置通过两个类来进行配置。首先是登录到 SAP 的配置创建 SAPDestininationConfig 类实现 IDestinationConfiguration 接口
public class SAPDestininationConfig : IDestinationConfiguration
{public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;public bool ChangeEventsSupported(){return false;}public RfcConfigParameters GetParameters(string destinationName){if (ECC.Equals(destinationName)) {RfcConfigParameters parms new RfcConfigParameters();parms.Add(RfcConfigParameters.AppServerHost, sapecc6); // or ip addressparms.Add(RfcConfigParameters.SystemNumber, 00); // instance numberparms.Add(RfcConfigParameters.SystemID, D01);parms.Add(RfcConfigParameters.User, STONE);parms.Add(RfcConfigParameters.Password, w123456);parms.Add(RfcConfigParameters.Client, 001);parms.Add(RfcConfigParameters.Language, EN);parms.Add(RfcConfigParameters.PoolSize, 5);return parms;}else {return null;}}RFC Server 的配置
public class RFCServerConfig : IServerConfiguration
{public event RfcServerManager.ConfigurationChangeHandler ConfigurationChanged;public bool ChangeEventsSupported(){return false;}public RfcConfigParameters GetParameters(string serverName){if (PRD_000.Equals(serverName)) {RfcConfigParameters parms new RfcConfigParameters();parms.Add(RfcConfigParameters.RepositoryDestination, ECC);parms.Add(RfcConfigParameters.GatewayHost, sapecc6);parms.Add(RfcConfigParameters.GatewayService, sapgw00);parms.Add(RfcConfigParameters.ProgramID, RFCSERVER);parms.Add(RfcConfigParameters.ConnectionCount, 5);return parms;}else {return null;}}
}ABAP 函数处理器
namespace SAPNCo3.ServerScenario
{public class FunctionModuleHandler{[RfcServerFunction(Name STFC_CONNECTION)]public static void StfcConnection(RfcServerContext context, IRfcFunction function){Console.WriteLine($Received function call {function.Metadata.Name} from system {context.SystemAttributes.SystemID}.);// 从ABAP获取 import 参数String reqtext function.GetString(REQUTEXT);Console.WriteLine($REQUTEXT {reqtext}\n);// 设置 export 参数function.SetValue(ECHOTEXT, reqtext);function.SetValue(RESPTEXT, 从RFC服务器返回的消息);}}
}RFC Server
最后在 Program.cs 中直接创建 RFC Server并启动
using SAP.Middleware.Connector;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace SAPNCo3.ServerScenario
{internal class Program{static void Main(string[] args){// Client configurationRfcDestinationManager.RegisterDestinationConfiguration(new SAPDestininationConfig());// Server ConfigurationRfcServerManager.RegisterServerConfiguration(new RFCServerConfig());// Function module handlersType[] handlers new Type[1] { typeof(FunctionModuleHandler) };// Create RFC ServerRfcServer server RfcServerManager.GetServer(PRD_000, handlers);// Start serverserver.Start();// 等待client发起调用指导用户按下 X 键Console.WriteLine(Server has been started. Press X to exit.\n);while (true) {if (Console.ReadLine().Equals(X))break;}// Server shut downserver.Shutdown(true); }}源码
sap_interface_nco3: SAP NCo 3.0 Demos