我正在制定一个与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并显示报告。在我仔细检查后,我会评论我的结果。
答案 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:
如果有功能,你需要了解如何运行它
如果没有功能。如果你或者更便宜,你需要了解 可以开发一个自定义的。
最高
感谢您的研究工作。