使用SAP R / 3连接第三方应用程序(MS Excel)

时间:2012-09-11 02:14:46

标签: excel vba ms-office sap sap-r3

我正在制定一个与SAP进行MS Excel(VBA宏)通信的解决方案。在您工作的任何公司,有时很难与SAP支持人员联系,因此最好找出自己的解决方案。

关于这个原因,我从基本开始:“将我自己的用户配置文件与SAP R / 3连接”。做了一些谷歌研究,我找到了一个很好的paper连接,这是代码的关键部分:

Dim objBAPIControl As Object 'Function Control (Collective object)
Dim sapConnection As Object 'Connection object
Set objBAPIControl = CreateObject("SAP.Functions")
Set sapConnection = objBAPIControl.Connection

sapConnection.client = "32"
sapConnection.user = "myUser"
sapConnection.Language = "EN"
sapConnection.hostname = "qwerty.example.com"
sapConnection.Password = "myPass"

(以及更多用户个人资料值........)

后来,我做了第二步,即读取一些表(在本例中为用户表)

If sapConnection.logon(1, True) <> True Then
MsgBox "No connection to R/3!"
Exit Sub 'End program
End If
Set objUserList = objBAPIControl.Add("BAPI_USER_GETLIST")
Set objUserDetail = objBAPIControl.Add("BAPI_USER_GET_DETAIL")

returnFunc = objUserList.Call
If returnFunc = True Then
Dim objTable As Object
Set objTable = objUserList.Tables("USERLIST")
ActiveSheet.Cells(1, 1) = "User count :" & objTable.RowCount

但现在,我的问题是:如何运行从VBA触发的某些事务(LM02,LS26,LX03等)?

谢谢你们!

PS。我正在使用MS Office 2007和Windows 7。

- 编辑:

嘿,我改变了攻击挑战的方式(我会让OP在上面帮助其他人)

这必须添加到第一个

Dim RfcCallTransaction As Object
Dim Messages As Object
Dim BdcTable As Object

与SAP的连接是相同的,但是一旦您登录:

If objBAPIControl.Connection.Logon(0, False) <> True Then
    Exit Sub
End If

Set RfcCallTransaction = objBAPIControl.Add("RFC_CALL_TRANSACTION_USING") 

here您可以找到RFC_CALL_TRANSACTION旧函数的“新”参数。

    RfcCallTransaction.exports("tcode") = "SE16"
    RfcCallTransaction.exports("mode") = "N"
Set BdcTable = RfcCallTransaction.Tables("bt_data")

在此部分之前,我确定了三件事:

1)它确实连接到SAP R / 3

2)它运行“SE16”交易

3)它可以从BdcTable

接收批输入

缺少的部分是,如何“格式化”BdcTable(我认为必须使用ABAP语言)来上传我想要在SE16上运行的确切数据(表格)。

EDITED: 我找到了一个我正在寻找的“格式化”表的例子:

add_bdcdata BdcTable, "SAPLSETB", "230", "X", "", ""
add_bdcdata BdcTable, "", "", "", "BDC_CURSOR", "DATABROWSE-TABLENAME"
add_bdcdata BdcTable, "", "", "", "BDC_OKCODE", "=ANZE"
add_bdcdata BdcTable, "", "", "", "DATABROWSE-TABLENAME", "KNA1"
add_bdcdata BdcTable, "/1BCDWB/DBKNA1", "1000", "X", "", ""
add_bdcdata BdcTable, "", "", "", "BDC_CURSOR", "MAX_SEL"
add_bdcdata BdcTable, "", "", "", "BDC_OKCODE", "=ONLI"
add_bdcdata BdcTable, "", "", "", "LIST_BRE", "250"
add_bdcdata BdcTable, "", "", "", "MAX_SEL", "5"
add_bdcdata BdcTable, "SAPMSSY0", "120", "X", "", ""
add_bdcdata BdcTable, "", "", "", "BDC_CURSOR", "01/02/2012"
add_bdcdata BdcTable, "", "", "", "BDC_OKCODE", "=%EX"
add_bdcdata BdcTable, "/1BCDWB/DBKNA1", "1000", "X", "", ""
add_bdcdata BdcTable, "", "", "", "BDC_OKCODE", "/EE"
add_bdcdata BdcTable, "", "", "", "BDC_CURSOR", "I1-LOW"
add_bdcdata BdcTable, "SAPLSETB", "230", "X", "", ""
add_bdcdata BdcTable, "", "", "", "BDC_OKCODE", "/EBACK"
add_bdcdata BdcTable, "", "", "", "BDC_CURSOR", "DATABROWSE-TABLENAME"

上面的代码仍然是VBA宏的一部分。但我不知道所有这些填充是什么意思。

完成此任务后,第二个挑战是将数据自动保存到MS Excel表格中。

(你能告诉我所有的编辑工作是否正常,或者我应该粘贴新代码并删除历史记录?)

EDITED: 我在SCN平台上提出了相同的问题摘要。您可以查看here

EDITED: 我在这个挑战中的目标是通过VBA宏运行事务(我正在寻找的TCODE是LM02,仓库的bin到bin事务),上传从MS Excel文件中提取的一些日期并执行事务。

- 最后编辑: 如果没有SAP IT支持的帮助,似乎无法完成此任务。 19 / sep / 12 |还在研究这个话题。 25/09/12 | 02 / OCT / 12 - &gt;我将尝试AutoIT进行日志记录,运行基本Tcode并显示报告。在我仔细检查后,我会评论我的结果。

3 个答案:

答案 0 :(得分:2)

注意:这是对@ fabiopagoti答案的另一种建议,这是一种完全不同的方法。

如果 - 正如您在其他评论中所建议的那样 - 您想要将数据导入R / 3应用程序,那么最好不要试图绕过公司IT。相反,您可以尝试与他们交谈并访问Legacy System Migration Workbench(LSMW)。这是一个功能强大的工具包,允许您记录对话步骤(在某些条件下),导入一些数据(例如从CSV文件),然后将记录和数据结合起来,用不同的数据“重放”相同的步骤 - 全部使用标准功能,不绕过任何安全检查。

答案 1 :(得分:0)

对不起我的朋友,但你不会比这更进一步。

您在代码中所做的是调用BAPI(基本上是RFC启用函数)。换句话说,SAP提供了从不同系统调用的标准函数。你可以认为这是一个老式的API。也可以创建自定义BAPI,但实际上几乎没有人这样做。

好消息是,通常,我说通常BAPI带来了与标准交易相同的功能。所以理论上你可以通过交易代码做什么,你可以通过BAPI调用。

与交易代码的BAPI关系不是一对一的。例如,您可以使用单个事务来插入,搜索,删除和编辑特定类型的文档,但要使用BAPI调用实现此目的,您将需要其中许多(一个用于创建文档,一个用于删除,一个用于检索等)。

有一个名为“BAPI”的事务(可能是唯一一个名称不错的tx代码),它包含系统中的所有BAPI,其参数和(一些不良的)文档。

答案 2 :(得分:0)

好吧,让我引用我得到的最佳答案。我在这里粘贴它是因为我认为其他人会遇到与我相同的问题。

  

第一步是了解您的RFC或BAPI是否存在   事务,但您没有ABAP事务的权限,   所以我不知道你怎么能找到它。

     

理论上,您可以尝试在WEB或SAP中查找它   文档,但然后(如果存在)您需要检查界面   定义导入/导出参数.....所以你应该这样做   获得SE37的授权。

     

下一步取决于您是否可以找到RFC功能   对于LM02:

     

如果有功能,你需要了解如何运行它

     

如果没有功能。如果你或者更便宜,你需要了解   可以开发一个自定义的。

     

最高

感谢您的研究工作。