一. Tracker基本使用
1. Tracker基本概念介绍
- Scripting Object: 展示SAP元素树, 可以展开与折叠
- ID: 元素的ID, 通过ID确定唯一对应的元素
- Text: 元素的文本内容, 如用户, 口令等, 没有文本的元素则Text内容为空
- Type: 元素类型, 不同的元素类型有不同的属性与方法
2. 基本使用方法
- SAP程序, 选择目标服务器, 进入登录页面
- 打开tracker程序, 在Analyse会话框中, 点击扫描SAP会话
- 出现类似 /app/com[0]ses[0]/wnd[0 ]的元素ID之后, 表明tracker已经与SAP正常创建了会话.
- 进入Recorder会话框, 点击python, 与红色的Record按钮, tracker将一python代码的形式记录我们对SAP操作的过
- 记录完成后点击黄色的Stop script process按钮, 再将tracker记录的python代码应用在自己的流程中
二. python代码与tracker
1.python创建SAP连接
import win32com.client # 连接已经启动的SAP程序,获取COM(Component Object Model)对象,用于组件交互sap_gui_auto =win32com.client.Getobject("SAPGUI")# 获取脚本引擎对象 application =sap_gui auto.GetscriptingEngine# 获取连按 connect =application.children(0) # 获取session,会话 session = connect.children(0)
注意:Children函数中参数的选择根据我们的会话实际情况选择,如果只开一个窗口,通常选择0即可,下图所示,打开了两个connect窗口,就存在两个connect,只需要选择需要的链接索引即可,session也是同理
2. 登录SAP
- findById(), 参数为元素的ID, 可以找到wnd中唯一对应的元素
#登录SAP,在SAP中操作登录步骤 session.findById("wnd[0]/usr/txtRSYST-BNAME").text ="rpafasc" session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = "********" session.findById("wnd[0]/usr/pwdRSYST-BCODE").setFocus() session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 9session.findById("wnd[0]").sendvkey(0)
3. 进入供应商行项目, 并输入搜索条件
# 在SAP中进行相关操作,最后复制使用 # 输入事务代码 session.findById("wnd[0]/tbar[0]/okcd").text = "fb11n" #点击回车键 session.findById("wnd[0]").sendvKey(0) # 输入搜索条件 session.findById("wnd[0]/usr/ctxtKD_BUKRS-LOW").text=“2023" # 输入公司代码session.findById("wnd[0]/usr/ctxtPA STIDA").text ="22.11.2022" # 输入目标日期session.findById("wnd[0]/usr/txtPA_NMAX").text =“5" # 输入最大行数session.findById("wnd[0]/usr/txtPA_NMAX").setFocus() session.findById("wnd[0]/usr/txtPA NMAX").caretPosition =10 session.findById("wnd[0]/tbar[1]/btn[8]").press()#点击确认进入表格页面 session.findById("wnd[1]/tbar[0]/btn[0]").press()
4.SAP表格操作
4.1 选择行
#双击,获取表格元素的ID table_id="wnd[0]/usr/cnt1GRID1/shellcont/she11/she11cont[1]/she11" # 获取表格元素 table_ele= session.findById(table_id) # 获取表格最大行数 max_row = table_ele.RowCount # 选择行 table_ele.selectedRows ="1" # 1未行索引,索引从0开始,这里表示第2行table_ele.selectedRows=“1,2" # 选择多行,第2行与第3行
4.2 读取目标单元格内容
#逐行遍历目标列单元格内容 for row_index in range(table_ele.Rovcount): # GetCe11Value参数1为行索引,参数2为列名,在SAP中双击列,即可获取列名 print("凭证编号:"",table_ele.Getce1lValue(row_index, "BELNR"))