cancel
Showing results for 
Search instead for 
Did you mean: 

ELEMENT_NOT_FOUND in CL_TRIGGER_COLL_PPF

0 Kudos

Hi,

I wish someone has come across this before and had cracked it.

This error is triggered by multiple applications, however at one stage below active calls for all errors has these:

   82 METHOD       CL_TRIGGER_COLL_PPF===========CP    CL_TRIGGER_COLL_PPF===========CM005     6

      CL_TRIGGER_COLL_PPF=>GET_NEXT_ELEMENT

   81 METHOD       CL_TTYPE_PPF==================CP    CL_TTYPE_PPF==================CM005   463

      CL_TTYPE_PPF=>DETERMINE

   80 METHOD       CL_CONTEXT_MANAGER_PPF========CP    CL_CONTEXT_MANAGER_PPF========CM003    59

      CL_CONTEXT_MANAGER_PPF=>DETERMINE

   79 METHOD       CL_MANAGER_PPF================CP    CL_MANAGER_PPF================CM002    93

      CL_MANAGER_PPF=>DETERMINE

   78 FUNCTION     SAPLCRM_ACTION                      LCRM_ACTIONU03                        127

      CRM_ACTION_DETERMINE

Below source code where error occurred behaves strangely and leaves no clue on what happened:

Line  SourceCde

    1 method GET_NEXT_ELEMENT .
    2
    3 *  if get_number_of_elements( ) <> 0.
    4     read table ref_table index iterator into ro_element.
    5     if sy-subrc <> 0.
>>>>>       raise element_not_found.
    7     endif.
    8     iterator = iterator + 1.
    9 *  else.
   10 *    raise no_elements.
   11 *  endif.
   12
   13
   14 endmethod.

This method is called in loop as below:

 

*---------------------process triggers at once-----------------

  current_trigger_list->reset_iterator( ).

  counter = current_trigger_list->get_number_of_elements( ).

DO counter TIMES.

    lo_trigger = current_trigger_list->get_next_element( ).

*   reset the relevant date (l_relevant is initial)

    lo_trigger->set_relevant( l_relevant ).

*   set the trigger at the medium to make sure both instances are

*   registered for saving                               "note 1474344

    lo_medium = lo_trigger->get_medium( ).

    lo_medium->set_trigger( lo_trigger ).

*   if an optimization rule is used, (re)calculate relevant date;

*   date might have been changed; will be set within the evaluation;

*   we do not care about the return value here          "note 1288535 >>

    if lo_trigger->get_optrule( ) is not initial.

      lo_trigger->evaluate_startcond( ip_check_opt_rule = sppf_true ).

    endif.                                              "note 1288535 <<

*   process triggers that are unprocessed and have the correct

*   processing time (3)

    IF lo_trigger->get_status( ) EQ sppf_status_unprocessed  AND

       lo_trigger->get_dispatch( ) EQ sppf_process_at_once.

*     EXECUTE method checks for locked an inactive triggers,

*     no need to check outside of object

      CALL METHOD lo_trigger->if_action_ppf~execute

        EXCEPTIONS

          OTHERS = 1.

      IF sy-subrc NE 0.

*        Ignore all errors

      ENDIF.

    ENDIF.

  ENDDO.

On every error, the iterator in "read table ref_table index iterator into ro_element" is always one greater than counter, implying that do loop has looped one extra time. The code above should not call get_next_element third time if counter is 2.

When looped for third time and read on REF_TABLE fails raising exception. The only way this can happen is if the counter value is subtracted / reset inside the loop which can not happen. This can not be reset by other called methods inside the loop as counter is local variable declared in method.

Did someone come across such issue before? any information regarding this / suggestions on where possible would really help the analysis.

Thanks and regards,

Nadh

Accepted Solutions (0)

Answers (1)

Answers (1)

dharmakasi
Active Contributor
0 Kudos

Hi Nadh,

Check your action profile assigned to your transaction type is having any issues.

The error is coming from action profile related codes only.

you can check action profile assigned to transaction type and action details at,

SPRO->CRM->Basin function->action->actions in transactions. you can check assign action profiles to business transaction types and change action and conditions.

Best Regards,

Dharmakasi.