我目前正在Visual Studio 2017和VirtualBox上Linux(openSUSE)上托管的SAP Server之间建立RFC连接。我发现的有关此问题的仅有帖子很旧,没有帮助。我想在C#中创建一个RFC函数,以图表形式返回数据库的数据,但是我不知道如何从代码开始以及如何在Visual Studio和sap服务器之间建立连接。我希望有人可以帮助我解决这些问题。
答案 0 :(得分:2)
如果您不知道如何开始,那么为什么不先阅读NCo文档呢? 您可以从https://support.sap.com/nco下载它。
由于您的环境似乎不仅限于Windows,因此我还要考虑.NET环境是否是您项目的最佳选择?如果使用其他连接器,您将获得更好的操作系统可移植性选项。 您可以在https://support.sap.com/connectors上找到用于其他环境和编程语言的SAP连接器。
答案 1 :(得分:1)
您可以将Visual Studio 2017与SAP .NET Connector 3.0一起使用吗?
您可以直接回答标题中较高级别的问题。我目前正在使用Visual Studio 2017来开发基于当前NCo 3的Web服务。
我目前正在Visual Studio 2017之间进行RFC连接 以及在VirtualBox上Linux(openSUSE)上托管的SAP服务器。
这有点令人困惑-您是否真的打算将VS本身连接到SAP,或者您是想用VS编写一个将连接到SAP的应用程序? .NCo与SAP的托管环境无关。我已经使用它连接到基于Linux的SAP,基于Windows的SAP,这没有什么区别。
我想在C#中创建一个RFC函数,该函数返回 图表中的数据库
RFC是对SAP FM功能模块的远程功能调用。 SAP FM仅使用ABAP语言编程。 BUT .NCo允许在.Net代码(例如C#)前面实现RFC Server接口,以便您可以从SAP作为RFC调用,并在RFC服务器中运行C#代码。应用。 .NCo公共文档中有一个示例。
您要读取哪个数据库? SAP的?您不应直接从外部代码读取SAP数据库,而应使用在SAP系统上运行的ABAP书面RFC来访问数据。尽管有RFC可以读取原始表,但SAP却不愿使用它,因为它绕过了从安全性到对象模型的所有内容。 SAP管理员有时会禁止在系统上运行而不是RFC。相反,您应该使用ALE中的常规RFC,BAPI或IDOC来访问SAP数据。
更简单地说,.NCo允许从.Net代码调用到SAP以执行RFC。这是您可能应该开始熟悉NCo库的基本方案。
答案 2 :(得分:0)
在您的web.config / app.config中声明以下SAP详细信息
<add key="DestinationName" value="*ANYNAME*" />
<add key="AppServer" value="****" />
<add key="SystemNumber" value="**" />
<add key="SystemID" value="**" />
<add key="UserName" value="***" />
<add key="Password" value="***" />
<add key="Client" value="***" />
<add key="Language" value="EN" />
从SAP网站下载适当的连接器dll(sapnco.dll和sapnco_utils),然后在您的应用程序中引用它们。 请参阅下面的示例代码以获取其余内容
RfcConfigParameters para = new RfcConfigParameters();
para.Add(RfcConfigParameters.Name, destinationname);
para.Add(RfcConfigParameters.AppServerHost, appServer); // If they are using SAP Router then please refer SAP documentation on Public and PrivateIP address details as you need both
para.Add(RfcConfigParameters.SystemNumber, systemNumber);
para.Add(RfcConfigParameters.SystemID, systemID);
para.Add(RfcConfigParameters.User, user);// "RFCUSER");
para.Add(RfcConfigParameters.Password, password);
para.Add(RfcConfigParameters.Client, client);
para.Add(RfcConfigParameters.Language, language);// "EN");
RfcDestination dest = RfcDestinationManager.GetDestination(para);
// Test connection
dest.Ping();
RfcSessionManager.BeginContext(dest);
var rfcFunction = dest.Repository.CreateFunction("RFCFunctionName");
rfcFunction.SetValue("INPUT PARAMETER NAME", "Value");
// Call the function
rfcFunction.Invoke(dest);
有关更多详细信息,请参见以下文档:https://support.sap.com/content/dam/support/en_us/library/ssp/products/connectors/msnet/dotnet_connector_30_programming_guide.pdf