SAP .NET RFC 服务器配合 SAP.NET Connector 2.0






4.70/5 (9投票s)
本文介绍如何从 SAP 连接到 .NET 应用程序
介绍
人们认为 SAP.NET Connector 只用于从 .NET 连接到 SAP。因此,他们知道 SAP.NET Connector 在将 SAP 数据导入我们的开发环境时很有用。但是,SAP.NET Connector 不仅有助于从 .NET 应用程序连接到 SAP,还有助于从 SAP 连接到我们的 .NET 应用程序。
我之前发表了一篇关于从 Visual Studio 2008 连接到 SAP 的文章。您可以通过此链接查看该文章。在本文中,我们将探讨如何从 SAP 连接到我们的 .NET 应用程序。
另一方面,SAP .NET Connector 是 Visual Studio .NET 2003 的一个附加组件。SAP 尚未为 Visual Studio 2005 和 Visual Studio 2008 开发连接器 API。我认为未开发连接器 API 的原因取决于一些营销策略以及使用 SAP 6.0 附带的 Web 服务所能实现的可行性。
众所周知,有一些第三方程序可以连接到使用 Visual Studio 2005 或 Visual Studio 2008 的 SAP Application Servers。但对于企业来说,现实是:“如果我们使用 SAP 作为 ERP 解决方案,并且需要通过其他系统连接到 SAP,我应该优先考虑 SAP 的建议”。这意味着“如果我们只需要连接器,就应该使用 SAP 连接器”。这种方法可能因人而异。但据我看来,这种方法是正确的。
我不想讨论 SAP 为什么不支持 Visual Studio 2005 和 2008 的连接器。但应该知道的是,通过在 Visual Studio .NET 2003 中创建库项目,并在 Visual Studio 2005 或 2008 中使用该项目,可以解决所需的愿望。我还发表了一篇关于此愿望的文章。您可以通过此链接查看该文章。
在本文中,我们将创建一个 .NET 服务器,用于从 SAP 连接到 .NET 端。在某些情况下,我们需要此解决方案。尽管 SAP 是满足所有企业需求的全方位解决方案中心,但有时 SAP 无法满足我们所有需求。如果我们的需求可以在 Visual Studio 环境中解决,那么我们就需要我下面将要解释的解决方案。
我们将演示一个使用 Gmail POP3 在 .NET 2003 中发送邮件的操作,并将从 SAP 调用此程序。
背景
必需品
- Visual Studio .NET 2003
- SAP Application Server [任何可接受的 RFC 版本]
- SAP .NET Connector 2.0
- Gmail 帐户
使用代码
首先,让我们看看 SAP 端。首先,我们需要在 SAP 中创建一个 RFC 函数。
如上所示,您的函数应该是 RFC 类型。
我们已经声明了函数的导入参数。
如上所示,我们的函数有一个导出参数。这将显示发送邮件的结果。
我们的函数有一个表参数,即邮件正文。该表的签名如下所示。
如您所见,无需编写代码,我们在连接到 .NET 时仅使用此函数模块的签名。
下一步是创建一个 .NET 项目。该项目可以是库应用程序、Windows 服务应用程序、Windows 应用程序或控制台应用程序或任何其他合适的应用程序。我刚刚创建了一个控制台应用程序。之后,我创建了一个名为 SAPProxy
的类。
然后,我在 SAPProxy1
类中定义了我的 YSEND_MAIL
函数。
因为我们将此应用程序用作服务器,所以您必须像我所示那样更改 SAPProxy1
类的属性。
将代理类型更改为服务器后,您将在解决方案资源管理器下看到创建的 SAPProxy1Impl.cs。然后打开 SAPProxy1Impl.cs 文件并添加一个额外的构造函数,如下所示:
public SAPProxy1Impl(string programId, string gwhost,
string sapgwxx, string codepage, SAP.Connector.SAPServer host)
: base(programId, gwhost, sapgwxx, codepage, host)
{
}
您还将看到 YSEND_MAIL
方法如下:
protected override void YSEND_MAIL(string IM_BCC, string IM_CC, string IM_SUBJECT,
string IM_TO, out string EX_RESULT, ref ZMAIL_BODYTable T_BODY)
当 SAP 函数调用此方法时,此方法将被调用。我们将此方法更改为如下:
string body = "";
System.Data.DataTable dt = T_BODY.ToADODataTable();
for (int i = 0; i < dt.Rows.Count; i++ )
{
body += dt.Rows[i][0].ToString();
}
string result;
ISMTP gMail = new GMailSMTP();
gMail.send(IM_TO, IM_CC, IM_BCC, “”,”", IM_SUBJECT, body, out result);
我删除了 mSAPProxy1Impl
类的 Main
方法,并将所需代码放入了 Class1
的 Main
方法中。
SAPServerHost host = new SAPServerHost();
SAPProxy1Impl impl = new SAPProxy1Impl("SENDING_MAIL", "", "sapgw00", "", host);
在创建 SAPProxy1Impl
时,我们将程序名称参数声明为“SENDING MAIL
”,网关主机为您的应用程序服务器的 IP 地址或名称,网关服务为“sapgw00
?”,代码页为“” ,最后一个是主机对象。
重要提示:如果您的应用程序服务器具有负载均衡属性,则应为网关主机参数声明负载均衡应用程序服务器的 IP 地址或名称。
然后,我们像这样启动我们的 RFC 监听器:
host.Start();
服务器将一直运行,直到 .NET 应用程序处于活动状态。否则它将被终止。因此,您需要在启动服务器后插入一个循环代码!!
此时,我们已在 .NET 端完成了所需的操作。最后一步又回到了 SAP。现在,让我们在 SAP 中转到 SM59 事务代码。您需要创建一个 TCP/IP RFC 连接。我在下面展示了:
创建时,屏幕应如下所示:
我只是注意到一点:如果您的应用程序服务器具有负载均衡,您需要在网关主机中输入负载均衡应用程序服务器的名称,并将“sapgw00
”作为网关服务。然后保存此 RFC 连接。之后,按“测试连接”按钮。您应该会看到以下屏幕:
一个普遍的错误是在 .NET 应用程序运行前测试连接时发生的。首先,运行 .NET 应用程序,然后测试连接。
所有操作都已完成。但是我们如何调用 .NET 应用程序?我们如何使用它?解决方案非常简单。在任何程序或函数中,您都应该像下面这样调用 YSEND_MAIL
函数:
如您所见,关键点是将 DESTINATION
声明为“ZSENDMAIL
”。因此,您是在 .NET 应用程序端调用此函数模块,而不是在 SAP 端。
您还可以访问我的技术博客网站查看我的其他文章。