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

我正在制定一个与SAP沟通MS Excel(VBAmacros)的解决scheme。 有时候你很难到达任何你所在公司的SAP支持人员,所以最好找出你自己的解决scheme。

出于这个原因,我开始使用基本function:“将我自己的用户configuration文件连接到SAP R / 3”。 做一些谷歌的研究,我发现了一个很好的连接性的论文 ,这里是代码的关键部分:

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" 

(和更多的用户configuration文件值……..)

后来,我做了第二步,读取一些表(在这种情况下,用户表)

 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 

但现在,这里是我的问题:如何运行一些交易(LM02,LS26,LX03等)从VBA发射?

感谢你们!

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

– 编辑:

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

这必须添加到第一个

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

与SAP的连接是一样的,但一旦login:

 If objBAPIControl.Connection.Logon(0, False) <> True Then Exit Sub End If Set RfcCallTransaction = objBAPIControl.Add("RFC_CALL_TRANSACTION_USING") 

在这里你可以findRFC_CALL_TRANSACTION旧函数的“新”参数。

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

直到这一部分我确定了三件事情:

1)它连接到SAP R / 3

2)运行“SE16”交易

3)它可以从BdcTable接收批量input

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

编辑:我find了“格式”表我正在寻找一个例子:

 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" 

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

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

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

编辑:我在SCN平台上提出了同样的问题作为总结。 你可以在这里查看 。

编辑:我在这个挑战中的目标是通过VBAmacros运行一个事务(我正在寻找的TCODE是LM02,一个bin到bin仓库事务),上传一个从MS Excel文件中提取的date,并执行交易。

– 上次编辑:似乎这个任务不能没有SAP IT支持的帮助下完成。 19 / sep / 12 | 还在研究这个话题。 25/09/12 | 02 / OCT / 12 – >我会尝试AutoIT进行logging,运行一个基本的Tcode并显示报告。 我再次检查后评论我的结果。

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

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

我很抱歉,我的朋友,但你不会得到比这更远的。

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

好消息是,通常我说BAPI通常会带来标准交易的相同function。 所以理论上你可以通过事务代码来做什么,你可以通过BAPI调用来完成。

与交易代码的BAPI关系不是一一对应的。 例如,您可以使用单个事务,使您能够插入,search,删除和编辑特定types的文档,但要使用BAPI调用来实现这一点,您将需要其中的许多事项(一个创build文档,一个删除,一个检索等)。

有一个叫做“BAPI”的事务(也许是唯一一个体面的tx代码),它包含了系统中的所有BAPI,它的参数和一些较差的文档。

那么,让我引用我得到的最佳答案。 我在这里粘贴,因为我认为别人会有同样的问题,我做了。

第一步是了解您的交易是否有RFC或BAPI,但您没有ABAP交易的许可,所以我不知道如何find它。

理论上你可以尝试在WEB或SAP文档中find它,但是(如果存在的话)你需要检查定义了导入/导出参数的接口…..所以你应该有SE37的授权。

下一步取决于您是否可以findLM02的RFCfunction:

如果有一个function,你需要了解如何运行它

如果没有function。 你需要明白,如果你或abaper可以开发一个自定义的。

马克斯

感谢您的研究努力。