BAOZAO7 2024-04-17 08:49 采纳率: 50%
浏览 18
已结题

SAP BDC中使用commit work and wait

BDC的内容是调用某个程序更新主数据信息,
然后commit work and wait,
最后再将一些内容反映到add-ON表。

通过debug发现commit work and wait没有生效,subrc =4,BDC直接终了。

将BDC的更新模式设置为A(异步),也没有用
最后将racommit打开后才使BDC正常走下去。

想知道为什么更新模式为异步更新,倒是and wait不生效呢?

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-17 08:49
    关注

    引自免费微信小程序:皆我百晓生

    在SAP中,Business Data Communication (BDC) 是一种用于在事务处理程序中执行批量数据处理的方法。当在BDC中使用COMMIT WORK AND WAIT语句时,它会立即提交当前的工作单元,并且阻塞后续操作直到提交成功或失败。如果子状态(SUBRC)返回值为4,这通常表示存在错误,可能是由于数据库连接问题、权限问题或者是其他系统异常导致的。

    在您的情况下,您尝试了不同的更新模式(同步和异步),但问题依然存在。最终,启用RACOMMIT解决了这个问题。让我解释一下这些概念以及可能的原因。

    1. 同步更新(Update Mode S):这是默认的更新模式,在每个BDC块执行后都会立即提交工作。如果提交失败,BDC流程会停止,因为COMMIT WORK AND WAIT会阻塞并返回错误。

    2. 异步更新(Update Mode A):在这种模式下,BDC块不会立即提交更改,而是将它们排队,等待所有BDC块完成后一起提交。即使一个块中的某些记录更新失败,其他成功的更新仍然会被提交。然而,即使在异步模式下,COMMIT WORK AND WAIT仍然会检查是否所有的更改都已经成功提交,如果有任何失败,它也会返回错误。

    3. RACOMMIT:这是一个系统参数,当它被设置为激活(RACOMMIT=1)时,允许在异步更新模式(A)下继续执行BDC流程,即使有部分记录的提交失败。在这种情况下,即使有错误发生,COMMIT WORK AND WAIT也不会阻止后续的BDC块执行,而是继续进行下一个任务。这意味着,即使有些更新未成功,流程仍将继续。

    在您的场景中,COMMIT WORK AND WAIT未生效并且SUBRC=4可能是由于异步更新模式下的部分记录提交失败,而这些失败在RACOMMIT未开启的情况下阻止了整个BDC流程的继续。当RACOMMIT被激活后,即使存在失败的提交,BDC也能够继续执行。

    为了调试此问题,您可以采取以下步骤:

    1. 确保所有必要的权限都已授予用户。
    2. 检查是否有任何特定记录导致提交失败,可能是因为数据完整性约束、字段长度限制或其他业务规则。
    3. 使用COMMIT WORK NO等候,这样可以避免因单个失败而导致的整个BDC流程中断,同时收集更多的错误信息,以便了解哪些记录导致了问题。
    4. 在日志文件中查找详细的错误消息,这可能会提供更具体的故障原因。
    5. 如果问题依然存在,考虑联系SAP支持团队获取专业帮助。

    如果你需要查看如何在代码中使用COMMIT WORK NO等候,下面是一个示例:

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        commit = 'X'
      EXCEPTIONS
        OTHERS = 1.
    IF sy-subrc <> 0.
      " 处理错误,例如写入日志等
    ENDIF.
    

    这个例子展示了如何在ABAP中使用COMMIT WORK NO等候来提交事务,而不是使用COMMIT WORK AND WAIT。这将允许BDC流程继续,即使有一个或多个记录的提交失败。当然,你需要确保有足够的错误处理机制来捕获并处理这些失败的情况。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月25日
  • 已采纳回答 4月17日
  • 创建了问题 4月17日

悬赏问题

  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令