点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好,
场景。
1。 用户创建客户。
2。 根据更改文档,引发事件CREATED(SWE2-配置的自定义Z *模块检查某些条件并引发事件)。
3。 工作流程开始,遍历所有公司代码,并通过BDC同步调用XD01以在其余公司代码中创建客户。
问题。
每次从工作流程中调用XD01时,也会引发事件CREATED,因此将递归调用工作流程。
我无法区分事件是由用户引发还是由工作流程引发。
到目前为止,我只是检查(Z * FM,在引发CREATED事件之前),如果KNB1中只有1个条目,则仅引发该事件。
我正在寻找一种解决问题的灵巧方法,它是暂时抑制工作流会话中的事件生成,传递一些额外的事件参数或其他方法。
谢谢。
嘿
如果在批处理工作项中创建其他CC视图,则执行这些步骤并触发(不需要的)事件的用户应为WF批处理用户(标准定制中的WF-BATCH)。
因此,您可以尝试为工作流定义一个起始条件,例如
&_ EVT_CREATOR&<>'WF-BATCH'
最好的问候
Joe
Hello Bartosz,
只是为了更好地理解,当您说基于更改文档时
您是说IDOC->更改指针吗? 还是在XD01的任何引发事件的出口中调用Z * FM/Module?
感谢
拉梅兹·汗
你好Bartosz
我的建议是用您自己的对象扩展标准的BUS,创建您的ZCREATED事件并使用该事件。
最诚挚的问候。
啊,我之前已经检查过,但错过了(!)
您是对的,后续事件将以USWF-BATCH作为创建者。
案件解决了。
我将在Z * FM中进行检查,无需启动工作流而仅在其中执行任何操作。
@ 拉梅兹汗,鲁本·罗兰诺(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内部)并且仅对用户生成的事件而不是工作流本身做出反应。
一周热门 更多>