You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在新SAP会话中执行自动化报表,解决创建后仍在旧会话操作的问题

SAP多会话并行处理问题:新会话创建后操作仍在旧会话执行的解决方法

问题场景

我用Python下载并合并SAP报表,由于数据量限制需要通过多SAP会话实现并行处理。但录制拼接的代码中,第2行创建新会话后,后续操作仍在旧会话中执行,代码无法正常运行:

session.findById("wnd[0]").resizeWorkingPane 145, 41, false
session.createSession()
session.findById("wnd[0]/tbar[0]/okcd").text = f"{SAP_transaction}"
session.findById("wnd[0]").sendVKey(0)
session.findById("wnd[0]/usr/ctxtS_VKORG-LOW").text = ""
session.findById("wnd[0]/usr/ctxtS_VKBUR-LOW").text = ""
session.findById("wnd[0]/usr/ctxtS_AUDAT-LOW").text = "16.11.2020"
session.findById("wnd[0]/usr/ctxtS_AUDAT-LOW").setFocus()
session.findById("wnd[0]/usr/ctxtS_AUDAT-LOW").caretPosition = 10
session.findById("wnd[0]/usr/btn%_S_VBELN_%_APP_%-VALU_PUSH").press()
session.findById("wnd[1]/tbar[0]/btn[24]").press()
session.findById("wnd[1]/tbar[0]/btn[8]").press()
session.findById("wnd[0]/tbar[1]/btn[8]").press()
session.findById("wnd[0]/tbar[1]/btn[43]").press()
session.findById("wnd[1]/tbar[0]/btn[0]").press()

问题原因

session.createSession()方法会返回新创建的会话对象,但你没有将这个对象赋值给变量,后续所有操作依然调用原来的session(旧会话),导致动作全部在旧会话中执行。

解决方法

1. 捕获新会话对象

将创建会话的语句修改为赋值形式,把新会话对象存到变量中,后续操作全部使用这个新变量:

# 原语句
# session.createSession()
# 修改为
new_session = session.createSession()

2. 修正后的完整代码示例

将后续所有session调用替换为new_session,同时调整为Python兼容的语法(比如方法调用加括号):

# 旧会话的初始化操作(如果需要保留)
session.findById("wnd[0]").resizeWorkingPane(145, 41, False)
# 创建并获取新会话
new_session = session.createSession()
# 所有后续操作使用新会话对象
new_session.findById("wnd[0]/tbar[0]/okcd").text = f"{SAP_transaction}"
new_session.findById("wnd[0]").sendVKey(0)
new_session.findById("wnd[0]/usr/ctxtS_VKORG-LOW").text = ""
new_session.findById("wnd[0]/usr/ctxtS_VKBUR-LOW").text = ""
new_session.findById("wnd[0]/usr/ctxtS_AUDAT-LOW").text = "16.11.2020"
new_session.findById("wnd[0]/usr/ctxtS_AUDAT-LOW").setFocus()
new_session.findById("wnd[0]/usr/ctxtS_AUDAT-LOW").caretPosition = 10
new_session.findById("wnd[0]/usr/btn%_S_VBELN_%_APP_%-VALU_PUSH").press()
new_session.findById("wnd[1]/tbar[0]/btn[24]").press()
new_session.findById("wnd[1]/tbar[0]/btn[8]").press()
new_session.findById("wnd[0]/tbar[1]/btn[8]").press()
new_session.findById("wnd[0]/tbar[1]/btn[43]").press()
new_session.findById("wnd[1]/tbar[0]/btn[0]").press()

3. 多会话并行的额外注意事项

  • 使用Python的threading模块管理多个会话(推荐,因为SAP会话是IO密集型任务),避免串行执行浪费时间
  • 给每个会话分配独立的数据分片(比如不同的日期区间、销售组织代码),避免数据重复或冲突
  • 提前确认SAP服务器允许的最大并发会话数,不要创建过多会话导致被系统限制

内容的提问来源于stack exchange,提问作者Maks W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:42:49