Check FM does not work

Dart, Jocelyn jocelyn.dart at sap.com
Tue Oct 23 20:35:24 EDT 2001


Hi Patrick,
Firstly, no you can't put COMMIT WORK in a check function module
as this interrupts the event linkage process - I won't go into all
the reasoning but there is some doco on this in the R/3 library.
 
Secondly, unfortunately Virendra's solution would have the same
problem - because the workflow would be started before the document is
saved.
 
Thirdly, it would be better to create a document type attribute
as part of the BSEG (or your delegated subtype of BSEG) object
if there isn't already one there (you don't mention what release
you are on), as you could then access it throughout all your workflows
now or in the future.  Setting up attributes (which are reusable) to read
the
database rather than coding direct reads (which aren't reusable)
in FMs is a good habit to get into.
 
However, none of that solves your problem.  What you need to do is identify
where and how the BSEG.CREATED event is raised.  You may need to contact
the developers via OSS to do this if you can't track it down yourself.
 
Once you know where and how the event is raised you can look at ensuring
that the event is only raised once the database tables have been updated.
 
For instance if the event is raised based on change documents, make sure
the change documents have update priority 2 (delayed) so that they occur
AFTER the document itself has been committed to the database. On the change
document function module XXXXX_WRITE_DOCUMENT where XXXXX is the change
document object, you should see it is an update module with "Start Delayed".
 
 
According to OSS note 38968 BSEG is created via change documents.
 
Or if the event is raised directly using function module SWE_EVENT_CREATE
swap to SWE_EVENT_CREATE_FOR_UPD_TASK (e.g. see OSS note 123782 which
may be related...) .
 
Suggest you also take it up with the FI developers via OSS to clarify
when and how the event is raised.
 
Hope that helps.
Regards,
        Jocelyn Dart
Consultant (EBP, BBP, Ecommerce, Internet Transaction Server, Workflow)
SAP Australia
Email jocelyn.dart at sap.com <mailto:jocelyn.dart at sap.com>
Tel: +61 412 390 267
Fax: +61 2 9935 4880
 
 
-----Original Message-----
From: virendradapt [mailto:virendradapt at micron.com]
Sent: Wednesday, 24 October 2001 4:49 AM
To: SAP-WUG at MITVMA.MIT.EDU
Subject: Re: Check FM does not work
 
 
Hello Patrick,
Not exactly answering what you asked, but if you can check the document
type("ZR") inside the WF template and end if it is not "ZR" could solve you
problem.
Disadvantage would be more Workitems than required.
Virendra.
 
 -----Original Message-----
From:   de Valensart Schoenmaeckers, Patrick
[mailto:deValensartSchoenmaeckers.Patrick at pmintl.ch]
Sent:   Tuesday, October 23, 2001 11:43 AM
To:     SAP-WUG at MITVMA.MIT.EDU
Subject:        Check FM does not work
 
Hi workflowers.
 
I want to trigger an approval workflow for all FI-AP documents, except for a
FI document type "ZR". I have then linked my workflow to the event
BSEG.CREATED with a "check" function module that raise an exception if the
document type is ZR (via transaction SWE2).
However, it looks like when posting an FI document, the function module is
called before that the table BKPF is updated. So my select statement does
not select anything, and the FM does therefore not raise an exception as
expected. When I try to use the test tool "generate event" (transaction
SWUE), it works fine (which is normal, because I am then working on an
existing document.)
 
I searched OSS to solve this problem without success. I also tried to put a
"commit work" statement in the function module, but that gives an error
message (a sap office Express info "Update was terminated") when trying to
post the document, and it is not posted. Any help or tip to solve this would
be very much appreciated.
 
Thanks in advance & Kindest regards to all.
 
Patrick de Valensart
Associate IS Analyst
Philip Morris Benelux M&S
 
 
P.S. Here is my FM :
 
FUNCTION Z_AP_WF_EVENT_CHECK_NOT_ZR.
*"----------------------------------------------------------------------
*"*"Update function module:
*"
*"*"Local interface:
*"       IMPORTING
*"             VALUE(OBJTYPE) LIKE  SWETYPECOU-OBJTYPE
*"             VALUE(OBJKEY) LIKE  SWEINSTCOU-OBJKEY
*"             VALUE(EVENT) LIKE  SWEINSTCOU-EVENT
*"             VALUE(RECTYPE) LIKE  SWETYPECOU-RECTYPE
*"       TABLES
*"              EVENT_CONTAINER STRUCTURE  SWCONT
*"       EXCEPTIONS
*"              DO_NOT_TRIGGER
*"----------------------------------------------------------------------
  INCLUDE <CNTAIN>.
  DATA : BEGIN OF KEY,
           BUKRS LIKE BSEG-BUKRS,
           BELNR LIKE BSEG-BELNR,
           GJAHR LIKE BSEG-GJAHR,
           BUZEI LIKE BSEG-BUZEI,
         END OF KEY.
  CLEAR KEY.
  KEY = OBJKEY.
* commit work.
  SELECT SINGLE * FROM BKPF WHERE BUKRS = KEY-BUKRS
                              AND BELNR = KEY-BELNR
                              AND GJAHR = KEY-GJAHR.
  IF BKPF-BLART EQ 'ZR'.
    RAISE DO_NOT_TRIGGER.
  ENDIF.
 
ENDFUNCTION.
 


More information about the SAP-WUG mailing list