3

我对使用 SAP 不是很熟悉,但我目前的任务是利用 Rfc 调用通过我正在处理的 ac# 项目在 SAP 中创建采购订单。

使用直接 Rfc 调用而不是 BAPI 有什么优势吗?我问过我的主管,他的理由是“避免未知/不必要的混乱”。

我们的旧程序使用 BAPI。我发现通过这项任务,我现在正在追赶我的尾巴,因为我深入研究元数据并解决使用/获取我需要的结构的问题。

事情进展顺利,但我只是不明白坚持使用 Rfc 而不是 BAPI。

编辑以澄清我糟糕的术语:我们目前使用一个包装器,然后为我们调用 BAPI。我的任务是不使用包装器,而是使用与 BAPI 相同的 Rfc 调用。

例子:

IRfcFunction poCreateFunction = _dest.Repository.CreateFunction("BAPI_PO_CREATE1");
IRfcStructure poHeader = poCreateFunction.GetStructure("POHEADER");
poCreateFunction.SetValue("POHEADER", poHeader);
...
poCreateFunction.Invoke(_dest);
4

2 回答 2

2

你的主管给了你一个非常半途而废的答案,这让你想知道他是否理解他通过强迫你使用自定义(我假设)RFC 来实现的目标。

在 .NET 集成项目中,我(作为 ABAP 程序员)通常会提供包装 RFC 模块来隐藏 BAPI 的一些复杂性,或者因为 .NET 端可能没有 BAPI 所需的所有信息。这通常会导致界面更简单,但功能有限。但最后只是将 BAPI 调用从 .NET 移动到 ABAP 堆栈中。

如果您在使用 BAPI 时没有出现所提供的 RFC 功能模块的问题,则该功能模块可能有问题。或者至少,它没有达到将 SAP 的复杂性从 .NET 程序中隐藏的目的,也没有为您提供比使用标准 BAPI 的任何好处,至少它有很好的文档记录和支持。

于 2013-04-25T06:51:30.153 回答
2

一个技术上正确但有点无益的答案是?SYNTAX ERROR,然后是一个巨大的蓝色闪烁光标。

BAPI 是支持 RFC 的功能模块,因此调用 BAPI 和任何其他支持 RFC 的功能模块在技术上没有区别。不同之处在于 BAPI 是正式发布的,供客户和合作伙伴使用。它们得到支持、维护并且大部分都有很好的文档记录——与某些内部功能模块相反,由于某些技术原因必须启用 RFC。任何想要提供 BAPI 的开发人员都必须遵守一组严格的规则,以便在整个编程接口中维护一组特定的标准。的确,BAPI 具有相当长的参数名称和庞大的数据结构来涵盖各种特殊应用程序,但称其为“一团糟”并没有给人留下积极的印象……

于 2013-04-25T06:13:41.240 回答