在主表FKKVK,DPSOB_BP_ACC和BCONT中批量更新"自定义字段"的最佳方法是什么?

2020-09-27 05:45发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


SAP PSCD模块具有用于合同帐户的主表FKKVK,

DPSOB_BP_ACC用于合同对象,BCONT用于业务联系。

我们已经使用每个表中的"自定义包含"在这些表中创建了Z字段。

我们要运行一个程序,每天更新表中的这些z字段。

处理的记录数可以在10,000到500,000之间

我试图寻找BAPI一起处理多个记录(以最大化性能),但是找不到任何记录。

所以我写了一个Projection视图并更新了表。

但是质量小组坚持使用BAPI,因为我们正在更新标准表。

我试图解释说我们只是在更改这些表中的Z字段。

我的问题:

(A)

我的方法正确吗?因为我可以调用FM进行锁定和授权。

使其像bapi一样工作。 (在这里,我还将需要知道如何称呼"更改文档"的大规模更改)。 我错过了什么吗?

OR

(B)

我是否应该循环调用BAPI 500,000次。

(C)

您有更好的方法吗?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


SAP PSCD模块具有用于合同帐户的主表FKKVK,

DPSOB_BP_ACC用于合同对象,BCONT用于业务联系。

我们已经使用每个表中的"自定义包含"在这些表中创建了Z字段。

我们要运行一个程序,每天更新表中的这些z字段。

处理的记录数可以在10,000到500,000之间

我试图寻找BAPI一起处理多个记录(以最大化性能),但是找不到任何记录。

所以我写了一个Projection视图并更新了表。

但是质量小组坚持使用BAPI,因为我们正在更新标准表。

我试图解释说我们只是在更改这些表中的Z字段。

我的问题:

(A)

我的方法正确吗?因为我可以调用FM进行锁定和授权。

使其像bapi一样工作。 (在这里,我还将需要知道如何称呼"更改文档"的大规模更改)。 我错过了什么吗?

OR

(B)

我是否应该循环调用BAPI 500,000次。

(C)

您有更好的方法吗?

付费偷看设置
发送
6条回答
小灯塔
1楼 · 2020-09-27 06:11.采纳回答

我认为质量团队需要更多地了解情况。 再次告诉他们这些是标准表中的自定义列,因此您可以直接更新它们,我完全同意您的观点A(也可以是工作流程,更改指针等等)

使用投影视图是一种确保标准列不更新的好方法。 如果您运行单个更新,则还可以指定要更新的确切列,即UPDATE表SET zzcolumn = ... WHERE ...

为避免与同时运行的其他进程发生冲突,如果其他作业仅读取这些表(如果数据库确实提交了读操作,例如Oracle,则可能存在"快照太旧"转储),则可能最终要小心。 这与BAPI的预防措施相同。

hongfeng1314
2楼-- · 2020-09-27 06:17

如果更新标准字段,则可能会破坏数据库的完整性。 当然,AEDAT和AENAM似乎并不那么有害,但谁知道。 您决定。

对于锁定,存在有人在批量更新之前立即开始编辑业务对象的风险,因此保存可以在编辑开始时将自定义字段恢复为其值。 在大规模更新之前,SAP锁(不是数据库锁)可以快速,无害地执行操作(如果只有一个用户正在编辑业务对象,则它将失败,但这是失败的一个合理原因,在此期间,没有人可以处理这些业务对象) 大规模更新)。

3楼-- · 2020-09-27 06:04

嗯,这是我罕见地部分不同意桑德拉的情况。

数据完整性不过是一个方面,还有锁定,更改文档,更改指针,PPF,WF,BTE,BAdI,出口等等。 所有这些都可能具有某些特殊功能。

我说部分不同意,因为这样一个假设,即OP会控制所有这些人,甚至可能会创建变更文档。 足够公平。

我可以想象一个简单的场景:开发人员不知道有一个BAdI或增强功能,它做了一些包含Z字段的工作。 如果直接更新Z字段,则不会调用它。 如果更新是通过BAPI进行的,那么它将(可能)进行。

因此,如果您确定没有可能受到影响的辅助活动,那就很好。

如果这是一个一次性的过程,那么我会避免麻烦自己去处理变更文档,锁和身份验证以及寻找其他潜在的变更挂钩,而只需通过BAPI即可。 将500,000批次分装成隔夜包装,如果需要,可以周末运行。 工作流程时间比开发人员时间便宜。

Cikesha
4楼-- · 2020-09-27 06:19

同意进行SAP锁定,防止其他活动同时更新表很重要,但我想这不会损害数据库 如果更新失败,因为它只会杀死进程,因此标准程序中就不会有任何数据库完整性错误(对于自定义列,这应由客户团队负责)。

原始问题的重要部分是质量团队坚持不直接更新标准表,但是我敢肯定,该原则是针对标准列的,而不是针对自定义列的(至少,可能没有 研究一下。

只要标准程序有问题,只要可以确保标准列未更新,SAP支持仍然适用。这就是为什么使用投影视图或明确命名列很重要的原因。

对于更改指针等,它通常适用于单个更新,因此仅由客户开发人员负责,不存在影响标准流程的风险。

PS:当然,如果仅关于更新自定义列(而不是插入或删除行),那么所有这些都是有效的。

clasier
5楼-- · 2020-09-27 05:58

我可以问一下:这些Z字段的业务要求是什么 ,什么触发了对这些字段进行更新的需要?

有另一种方式可以满足您的要求。 您已向我们介绍了您的解决方案,但并未真正介绍业务方案。

(只需在这里大声思考:您可以创建一个与FKKVK相同的键的Z表。然后,您可以随意以任何方式更新它,而没有BAPI或锁定问题。)

Tong__Ming
6楼-- · 2020-09-27 06:13

嗨,

业务要求:每天评估是否有任何CA/CO/CC准备好设置存档日期(根据政府法律)。

步骤:

在创建CA,CO和CC的母版时,设置默认的归档代码(Z字段1)。

在日常运行中,检查主控CA或CO或CC是否将其状态从主动更改为被动,或从被动更改为主动。 设置一个日期(Z Fiedl 2),以指示该主服务器处于非活动状态,因此可以考虑进行存档。

然后设置一个日期(Z Fiedl 3),以指示可以在基于存档代码和政府法律定义的公式计算出的日期对母版进行存档。

要回答您的问题:我们无法创建另一个Z表以满足我们的要求。

原因:

1)Z字段是母版的属性,由于我们已经自定义了包含在它们各自的主表中的内容(这是SAP PSCD模块,使用事件来创建/更改),因此我们需要在母版中使用它们。

2)由于

,此时更改设计是不可行的

a)依赖关系

b)时间和资源限制

一周热门 更多>