更改文档+工作流程,避免重复发生

2020-09-02 18:20发布

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

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


你好,

场景。

1。 用户创建客户。

2。 根据更改文档,引发事件CREATED(SWE2-配置的自定义Z *模块检查某些条件并引发事件)。

3。 工作流程开始,遍历所有公司代码,并通过BDC同步调用XD01以在其余公司代码中创建客户。

问题。

每次从工作流程中调用XD01时,也会引发事件CREATED,因此将递归调用工作流程。

我无法区分事件是由用户引发还是由工作流程引发。

到目前为止,我只是检查(Z * FM,在引发CREATED事件之前),如果KNB1中只有1个条目,则仅引发该事件。

我正在寻找一种解决问题的灵巧方法,它是暂时抑制工作流会话中的事件生成,传递一些额外的事件参数或其他方法。

谢谢。

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

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


你好,

场景。

1。 用户创建客户。

2。 根据更改文档,引发事件CREATED(SWE2-配置的自定义Z *模块检查某些条件并引发事件)。

3。 工作流程开始,遍历所有公司代码,并通过BDC同步调用XD01以在其余公司代码中创建客户。

问题。

每次从工作流程中调用XD01时,也会引发事件CREATED,因此将递归调用工作流程。

我无法区分事件是由用户引发还是由工作流程引发。

到目前为止,我只是检查(Z * FM,在引发CREATED事件之前),如果KNB1中只有1个条目,则仅引发该事件。

我正在寻找一种解决问题的灵巧方法,它是暂时抑制工作流会话中的事件生成,传递一些额外的事件参数或其他方法。

谢谢。

付费偷看设置
发送
5条回答
宇峰Kouji
1楼 · 2020-09-02 19:14.采纳回答

如果在批处理工作项中创建其他CC视图,则执行这些步骤并触发(不需要的)事件的用户应为WF批处理用户(标准定制中的WF-BATCH)。

因此,您可以尝试为工作流定义一个起始条件,例如

&_ EVT_CREATOR&<>'WF-BATCH'

最好的问候

Joe

路亽曱_Ryan
2楼-- · 2020-09-02 19:04

Hello Bartosz,

只是为了更好地理解,当您说基于更改文档时
您是说IDOC->更改指针吗? 还是在XD01的任何引发事件的出口中调用Z * FM/Module?

感谢
拉梅兹·汗

DafaDDDa
3楼-- · 2020-09-02 19:20

你好Bartosz

我的建议是用您自己的对象扩展标准的BUS,创建您的ZCREATED事件并使用该事件。

最诚挚的问候。

SAP小黑
4楼-- · 2020-09-02 19:16

啊,我之前已经检查过,但错过了(!)

您是对的,后续事件将以USWF-BATCH作为创建者。

案件解决了。

我将在Z * FM中进行检查,无需启动工作流而仅在其中执行任何操作。

Doze时光
5楼-- · 2020-09-02 19:19

@ 拉梅兹汗鲁本·罗兰诺(Ruben Rollano)Carcajona

不涉及IDOC。

我已经创建了自定义BOR对象ZZ_KNA1(作为KNA1的子类型)。 标准KNA1对象没有任何事件,因此我添加了它们(事件ZZ_KNA1.created/ZZ_KNA1.changed)并将它们绑定到更改文档(DEBI-客户)-tcode SWEC。

然后在tcode SWE2中,将事件ZZ_KNA1.created绑定到我的工作流,并将自定义Z *功能模块配置为"接收器功能模块"。

通过添加接收器FM,在引发ZZ_KNA1.created事件之前,系统会自动调用Z * FM(此处没有自定义编码,只要创建客户,系统便会调用此FM)。 在此FM中,在引发实际事件之前,我先检查了一些条件(客户组KNA1-KTOKD),然后通过调用SWW_WI_CREATE_VIA_EVENT_IBF引发事件。

以上工作原理,在创建客户之后启动工作流程。

问题在于工作流本身还会创建客户(将他们扩展到其他公司代码),但是会触发ZZ_KNA1.created事件,进而启动工作流。

作为一个例子。

比方说,有3个公司代码1000、1001、1002。

1。 用户在CC 1000中创建客户。

2。 调用Z * FM,调用ZZ_KNA1。引发created事件,调用工作流。

3。 工作流开始将客户复制到CC 1001、1002。

4。 调用Z * FM,调用ZZ_KNA1。CC1001引发了created事件-再次调用了相同的工作流程。

5。 调用Z * FM,调用ZZ_KNA1。CC1002引发了created事件-再次调用了相同的工作流程。

我不希望发生第4步和第5步,或者至少不希望找到一种条件使我能够过滤事件(在Z * FM内部)并且仅对用户生成的事件而不是工作流本身做出反应。

一周热门 更多>