SAP Business Partner WebService 使用问题大全

文章目录

    • [1. 在哪里可以查找到SAP官方文档用以配置BP与外围系统的WebService交互?](#1. 在哪里可以查找到SAP官方文档用以配置BP与外围系统的WebService交互?)
    • [2. 如何将BP一次性分发到多个系统?](#2. 如何将BP一次性分发到多个系统?)
    • [3. 如何避免目标系统中的BP角色被删除?](#3. 如何避免目标系统中的BP角色被删除?)
    • [4. 如何防止在数据分发后添加了不必要的BP角色?](#4. 如何防止在数据分发后添加了不必要的BP角色?)
    • [5. 如何控制某些BP不发送到指定目标系统(通过DRFF)?](#5. 如何控制某些BP不发送到指定目标系统(通过DRFF)?)
    • [6. 在多个系统中实现自动数据分发(系统A->系统B->系统C)](#6. 在多个系统中实现自动数据分发(系统A->系统B->系统C))
    • [7. BP分发过程中的编码范围确定,如何确保目标系统与源系统保持一样的BP号码?](#7. BP分发过程中的编码范围确定,如何确保目标系统与源系统保持一样的BP号码?)
    • [8. BP分发过程中的客户/供应商账户组确定](#8. BP分发过程中的客户/供应商账户组确定)
    • [9. 如何分发带有员工角色的BP主数据?](#9. 如何分发带有员工角色的BP主数据?)
    • [10. 如何实现BP的直接分发或池分发?](#10. 如何实现BP的直接分发或池分发?)
    • [11. 如何仅将主BP分发到目标系统(忽略业务伙伴关系)?](#11. 如何仅将主BP分发到目标系统(忽略业务伙伴关系)?)
    • [12. Key Mapping相关报错](#12. Key Mapping相关报错)
    • [13. 如何通过SPROXY_START重新处理报错/成功的XML报文?](#13. 如何通过SPROXY_START重新处理报错/成功的XML报文?)
    • [14. 报文消息在SXMB_MONI(或SXI_MONITOR)中显示,而不是SRT_MONI](#14. 报文消息在SXMB_MONI(或SXI_MONITOR)中显示,而不是SRT_MONI)
    • [15. 如何解决BP分发过程中的锁定问题?](#15. 如何解决BP分发过程中的锁定问题?)
    • [16. 为何当系统中存在待处理消息时,BP无法进行分发操作?](#16. 为何当系统中存在待处理消息时,BP无法进行分发操作?)
    • [17. 如何检查、矫正或修改Key Mapping(单条或批量)?](#17. 如何检查、矫正或修改Key Mapping(单条或批量)?)
    • [18. 如何映射自定义字段(BAdI)?](#18. 如何映射自定义字段(BAdI)?)

1. 在哪里可以查找到SAP官方文档用以配置BP与外围系统的WebService交互?

2. 如何将BP一次性分发到多个系统?

在配置BP集成时,推荐使用服务组(Service Group)并让逻辑端口(Logical Port)在处理待办任务时自动生成。如果你手工创建逻辑端口,将无法实现分发到多个目标系统的功能。因此,BP分发到多个目标系统的SOA配置正确设置后,并不需要手工设置任何逻辑端口。

3. 如何避免目标系统中的BP角色被删除?

为避免删除角色,您可以在目标系统中使用 DRFF 事务码定义角色段筛选器,排除特定情况下要进行数据集成的BP角色。

例如,如果你想避免S/4HANA系统中的角色'FLVN01'(供应商角色)不会被来自C4C的BP数据(客户主数据)删除。在S/4系统中的角色段"业务伙伴角色 - 98601"中,将角色FLVN01加入"排除的删选标准",如下图所示。

4. 如何防止在数据分发后添加了不必要的BP角色?

为了避免数据分发中新增不需要的BP角色:

  • 在源系统中:
    使用DRFF定义角色段筛选器,排除掉不需要传输的BP角色,这些角色将不会出现在分发报文中
  • 在目标系统中:
    如果条件不允许修改源系统的筛选器,你也可以选择在目标系统中使用BAdI MDG_SE_BP_BULK_REPLRQ_IN。该BAdI可以修改传入的报文信息,以便删除不需要的BP角色信息。

5. 如何控制某些BP不发送到指定目标系统(通过DRFF)?

为避免BP数据发送到某些目标系统。你可以使用DRF的对象过滤器实现该需求:

  1. 打开事务码 DRFF

  2. 选择相关的分发模型并点击"显示"按钮

  3. 你将看到两部分的内容(如下图):

    • 用于限制业务对象的筛选标准:该条件下的所有BP将会被分发到目标系统
    • 用于排除业务对象的筛选标准:该条件下的所有BP将不会被分发到目标系统
    1. 按需求填入相关的筛选标准
    2. 保存

这套过滤机制使用户能够精确地控制哪些 BP 数据会被分发到目标系统。

6. 在多个系统中实现自动数据分发(系统A->系统B->系统C)

通过web service 实现的标准SAP BP分发的设计初衷就是用来防止 数据接收系统向其他已连接的系统进行进一步的自动分发操作。该设计是为了避免可能出现的分发循环。具体来说,SAP在函数 MDG_BS_BP_OUTBOUND_DRF 中添加了以下逻辑,用来阻止BP数据进一步地自动下发:

因此,并没有标准方式来突破这一限制。

SAP建议,如果BP应该被发送到多个系统,我们应该通过源系统并行分发的方式实现:

  • 系统A -> 系统B
  • 系统A -> 系统C

而不是:

  • 系统A -> 系统B -> 系统C

7. BP分发过程中的编码范围确定,如何确保目标系统与源系统保持一样的BP号码?

为确保在数据分发过程中,目标系统与源系统保持一致的BP编号,你必须在目标系统中配置业务合作伙伴分组,使其使用外部编号范围(视图:V_TB001)。这将允许目标系统直接使用来自源系统报文中的BP号码,而不是自己生成一个新号。

此外,如果没有针对BP分组设置值映射(Value Mapping),则目标系统将直接使用源系统报文中的BP分组用于创建BP。

8. BP分发过程中的客户/供应商账户组确定

在BP分发过程中,目标系统会使用传入报文中指定的客户或供应商账户组。然而,该账户组的校验内容取决于当前系统内的配置:

  • 必须将BP分组与客户/供应商账户组进行映射,视图V_TBD001 (客户),视图V_TBC001(供应商)
  • 如果上述两个视图中未针对某些特定组合勾选"灵活分组"标识,系统将忽略传入报文中的账户组,而直接使用视图中维护的账户组。
  • 如果上述两个视图中针对某些组合勾选了"灵活分组"标识,系统将会直接使用传入报文中的账户组,而不是视图中已定义的账户组信息。

9. 如何分发带有员工角色的BP主数据?

SAP 不建议也不支持通过业务伙伴接口来分发员工BP。因为员工及雇佣信息(如个人地址和银行账户)必须通过人力资源系统来创建和维护。

相反,员工数据应通过特定的员工接口(如 ALE 接口)进行分发,而非通过 BP接口。员工分发完成后,在目标系统中运行相关的员工同步报表,以更新相应的业务伙伴数据。

10. 如何实现BP的直接分发或池分发?

注意:如果客户没有启用SAP MDG系统,不推荐使用池分发模式配置BP分发。

通过以下路径更新分发模式:

  1. 事务码 DRFIMG
  2. 路径:数据复制->为数据复制定义自定义设置->定义技术设置->定义业务系统中的技术设置
  3. 选择目标系统
  4. 在左侧,双击"定义业务系统,BO"
  5. 找到或创建BO 类型 986
  6. 在"输出模式 "列,选择P 池输出D 直接输出 (缺省)
  7. 保存

11. 如何仅将主BP分发到目标系统(忽略业务伙伴关系)?

DRFF 中配置对应的"BP选择模式 "

12. Key Mapping相关报错

以下是一些常见的关于Key Mapping未正确维护而导致的接口报错:

消息文本 技术信息
对象标识符类型 888 对应的 ID 值仍然有效 006(BS_SOA_COMMON)
对象标识符类型 927 对应的 ID 值仍然有效 006(BS_SOA_COMMON)
外部地址代码已被业务合作伙伴Guid & 使用 009(BP_DATAREPL_FND)
地址不存在 010(AM)
业务伙伴 &1 已存在 286(R1)
地址仍在使用,无法删除 455(R1)
不存在伙伴 &2 的 BP 角色 &1 657(R11)
对当前客户,不支持任务插入 007(CVI_EI)
对当前供应商,不支持任务插入 042(CVI_EI)

除了以上这些常见报错外,错误的Key Mapping也会导致一些数据问题出现:

  • 合作伙伴功能没有正确创建或更新
  • 在同一个报文中多次出现相同的业务伙伴

你可以阅读 业务合作伙伴Key Mapping问题处理 获得进一步的信息。

此外,表 BUT020 中的地址 GUID 在源系统和目标系统之间也必须保持一致。如果两者不一致,就会出现与地址相关的错误。

13. 如何通过SPROXY_START重新处理报错/成功的XML报文?

通过SRT_MONI 或 SXI_MONITOR下载报文XML后,你可以在目标系统中使用事务码 SPROXY_START手工触发数据处理流程。

在手工重新触发前,将XML打开并移除字段 changeOrdinalNumberValue="xxxx" 的值,该字段用于确保多个xml以指定顺序执行。

  • 打开事务代码 SPROXY_START

  • 输入以下ABAP名称:

    • II_MDG_BP_RPLCTRQ - 处理 BusinessPartnerSUITEBulkReplicateRequest_In
    • II_MDG_BP_BUSINESS_PARTNER_REL - 处理 BusinessPartnerRelationshipSUITEBulkReplicateRequest_In
    • II_MDG_BP_RPLCTCO - 处理 BusinessPartnerSUITEBulkReplicateConfirmation_In
    • II_MDG_BP_BUSINESS_PARTNER_RE1 - 处理 BusinessPartnerRelationshipSUITEBulkReplicateConfirmation_In
  • 点击 Test 按钮

  • 选择 "Generate Initial Req. Template"

  • 点击"执行" 按钮

  • 上传XML文件

  • 执行导入的XML文件

14. 报文消息在SXMB_MONI(或SXI_MONITOR)中显示,而不是SRT_MONI

这种现象通常是由于你在 SAP 系统中对消息处理及集成场景的不同配置方式所致:

  • SXMB_MONI / SXI_MONITOR: 这些事务码用于监控通过SAP PI/XI 运行时的系统处理消息。当消息到达当前系统时,它们会出现在这里:

    • 点对点通讯(Point-to-point)未激活
    • SOAMANAGER中未配置逻辑端口,因此web service将通过中间件进行传输,而非系统直连
  • SRT_MONI: 该事务码会监控通过ABAP Web Service运行时处理的所有web service消息,不涉及PI/XI系统。若一下情况出现,则消息会在此处显示:

    • SOAMANAGER正确配置并激活逻辑端口
    • 点对点通讯激活

总结:

如果在 SXMB_MONI(或 SXI_MONITOR)中看到相关消息,通常意味着系统正在使用中间件(PI/XI)进行处理,这是因为缺少逻辑端口配置,或未激活点对点通讯。当所有整合步骤按照官网文档进行配置,并在 SOAMANAGER 中正确设置集成配置,包括激活逻辑端口,消息应在 SRT_MONI 中显示出来。

15. 如何解决BP分发过程中的锁定问题?

通过BP web service进行数据分发时,锁定问题较为常见。以下步骤有助于减轻和解决这些问题:

  1. 定期执行错误处理报表
  • **/SAPPO/RESUBMIT_ORDERS_2:**确保将此后台作业设置为按固定时间间隔运行。该报表将对状态为"已转至外部应用程序"的消息进行重新发送。
  • SRT_UTIL_RESTART: 定期执行该报表,将对那些状态为"应用程序错误"和"系统错误"的消息进行重新执行。
  1. 在BAdI中实施等待WAIT或重复REPEAT逻辑
  • 通过程序逻辑在BAdI BUPA_INBOUND中新增等待和重复逻辑,用于处理数据锁定问题。
    以下是代码示例:

    c 复制代码
    EXPORT bupa_enq_repeats FROM 20 bupa_enq_wait FROM 3 TO MEMORY ID 'BUPA_ENQ_WAIT'.

16. 为何当系统中存在待处理消息时,BP无法进行分发操作?

当存在未处理的消息时,业务伙伴数据分发功能将被禁用,以避免将过时的信息传输至已连接的系统。

例如,如果系统 A 收到来自系统 B 的消息但未能成功处理该消息,那么该消息将处于"待处理"状态。在这种情况下,系统 A 不会发送有关该业务伙伴对象的任何新消息。

这一措施确保不会发送过时或不完整的信息,因为系统 B 的最新更新尚未被处理。

为了使数据得以正常分发,必须成功处理待处理的消息。也可以通过使用"MDG_DEL_MSG_PEND"报表将待处理消息从消息列表中删除。

17. 如何检查、矫正或修改Key Mapping(单条或批量)?

要检查和处理BP相关的Key Mapping问题,请遵循以下步骤:

  1. 初始步骤:
  • 阅读博文 业务合作伙伴Key Mapping问题处理 获取相关知识
  • 检查Key Mapping:
    使用事务码 MDG_ANALYSE_IDM 搜索和显示 Key Mapping数据
  • 手工编辑Key Mapping:
    使用事务码 MDG_KM_MAINTAIN 显示,创建和修改 Key Mapping数据(单条)
  1. 批量维护:
    批量创建或修改Key mapping仅限于以下特定场景:
  • 在系统刷新或Client Copy后

    当你复制一个系统(例如,从生产系统复制到测试系统)时,所复制的Key Mapping仍将指向原系统的业务系统。

    此时应使用事务码 MDG_ADJUST_IDM针对所有Key Mapping信息更新业务系统标识(例如,从PRD_100更新到QAS_100)

  • BP号码在目标系统和源系统中完全一致

    如果不同系统中的BP编号相同,你可以使用标准报表来批量创建Key Mapping:

    • MDG_ID_MATCH_BP_CP_LINK_UPD: 供应商联系人 Key Mapping
    • MDG_ID_MATCH_BP_CP_LINK_UPD_1: 客户联系人 Key Mapping
    • MDG_ID_MATCH_CUST_BP_REL_UPD: 客户 Key Mapping
    • MDG_ID_MATCH_SUPP_BP_REL_UPD: 供应商 Key Mapping
  • BP号码在目标系统和源系统中不一致

    如果BP编号在不同的系统中不一样,SAP没有提供标准工具可以批量维护Key Mapping,在该情况下只能手工更新。

总结:

需求 报表 支持批量
显示Key Mapping MDG_ANALYSE_IDM 不支持
创建或编辑Key Mapping MDG_KM_MAINTAIN 不支持
系统copy后调整 MDG_ADJUST_IDM 支持
批量创建(BP号码一致) 参见上述多个报表 支持
批量创建(BP号码不一致) 不支持 不支持

18. 如何映射自定义字段(BAdI)?

在为业务伙伴企业服务添加自定义字段后,在出站和入站处理过程中,必须确保这些字段得到正确映射。以下的BAdI与此相关:

  • MDG_SE_BP_BULK_REPLRQ_OUT: 在出站处理中使用此 BAdI,将来自 API 结构(数据库)的自定义字段值映射到代理结构(XML)中。
  • MDG_SE_BP_BULK_REPLRQ_IN: 以便将来自代理结构(XML)和已映射的 API 结构(标准逻辑)的自定义字段映射到最终的 API 结构(数据库)。
相关推荐
HeathlX2 天前
SAP-Fiori:系列(5)Gateway ODATA (V2) CURD之Update
sap·abap
HeathlX3 天前
SAP-Fiori:系列(4)Gateway ODATA (V2) CURD之Delete
sap·abap
小田的博客7 天前
SAP ABAP 上传EXCEL文件报错
sap
Henry-SAP8 天前
SAP MRP销售订单与预测驱动的业务解析
人工智能·sap·erp
我小时候很黑8 天前
SAP_运维问题处理_对象OFN_YR ** WL1000 的编号范围没有找到
运维·sap
书中野望9 天前
SAP客户主数据销项税默认国家分析
sap·sd·客户主数据·销项税国家
Henry-SAP9 天前
SAP MRP计划策略与需求类型对净需求计算业务视角解析
人工智能·sap·erp
study_小达人14 天前
sap client copy实操
sap·s4/hana
爱喝水的鱼丶14 天前
SAP-ABAP:深入浅出 SAP AFVC 表:生产订单工序的核心数据仓库
运维·服务器·数据仓库·sap·abap·pp