Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

parallel processing - Exception condition "COMMUNICATION_FAILURE" raised.

Clemenss
Active Contributor
0 Likes
2,200

Hi experts,

a question for people who worked with

CALL FUNCTION ...STARTING NEW TASK ...DESTINATION IN GROUP

I just made my first try for this: The test program tries to get user details using a BAPI which is called as often as a process is available.

Unfortunately it dumps with the first call with "COMMUNICATION_FAILURE" .

I hope this is an elemetry error. Further I like to know how I can determine the number of available processes dynamically just before calling.

Here my code:


DATA:
  gv_taskname                             TYPE char08,"scma_tpi_id,
  gt_bapiaddr3                            TYPE bapiaddr3t.
START-OF-SELECTION.
    PERFORM paralleltest.

*&---------------------------------------------------------------------*
*&      Form  paralleltest
*&---------------------------------------------------------------------*
FORM paralleltest.

  DATA:
    ls_bapiaddr3                          TYPE bapiaddr3,
    lv_group                              TYPE rzllitab-classname,
    lv_max                                TYPE i,
    lv_inc                                TYPE i,
    lv_free                               TYPE i,
    lv_nproc                              TYPE i,
    lv_bsize                              TYPE i,
    lv_grid_title                         TYPE  lvc_title,
    lt_bname                              TYPE TABLE OF usr03-bname,
    lt_bname2do                           TYPE TABLE OF usr03-bname.
  FIELD-SYMBOLS:
    <bname>                               TYPE usr03-bname.

  SELECT bname INTO TABLE lt_bname FROM usr01.

  SELECT classname
    INTO lv_group
    FROM rzllitab UP TO 1 ROWS
    WHERE grouptype                       = 'S'.
  ENDSELECT.

  CALL FUNCTION 'SPBT_INITIALIZE'
       EXPORTING
            group_name                    = lv_group
       IMPORTING
            max_pbt_wps                   = lv_max
            free_pbt_wps                  = lv_free
       EXCEPTIONS
            invalid_group_name            = 1
            internal_error                = 2
            pbt_env_already_initialized   = 3
            currently_no_resources_avail  = 4
            no_pbt_resources_found        = 5
            cant_init_different_pbt_groups = 6
            OTHERS                        = 7.
  IF sy-subrc                             <> 0.
    MESSAGE ID sy-msgid                   TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  gv_taskname                             = 'A0000000'.
  lv_nproc                                = lv_free - 2.
  CHECK lv_nproc                          > 1.
  DESCRIBE TABLE lt_bname.
  lv_bsize                                = 
    sy-tfill DIV ( lv_nproc - 1 ).
  LOOP AT lt_bname ASSIGNING <bname>.
    ADD 1 TO lv_inc.


    CALL FUNCTION 'BAPI_USER_GET_DETAIL'
       STARTING NEW TASK gv_taskname
       DESTINATION                        IN GROUP lv_group
       PERFORMING bapi_receive ON END OF TASK
     EXPORTING
          username                        = <bname>.
    CHECK lv_inc >= lv_nproc.
    CLEAR lv_inc.
    WAIT UNTIL gv_taskname IS INITIAL.

  ENDLOOP.
  WAIT UNTIL gv_taskname IS INITIAL.

  lv_grid_title                           = gv_taskname.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            i_structure_name              = 'BAPIADDR3'
            i_grid_title                  = lv_grid_title
       TABLES
            t_outtab                      = gt_bapiaddr3.


ENDFORM.                    " paralleltest
*&---------------------------------------------------------------------*
*&      Form  bapi_receive
*&---------------------------------------------------------------------*
FORM bapi_receive USING pv_taskname .
  DATA:
    ls_bapiaddr3                          TYPE bapiaddr3,
    lv_msg                                TYPE text80,
    lt_mbew                               TYPE TABLE OF mbew.
  RECEIVE RESULTS FROM FUNCTION 'MBEW_EXTEND'
      IMPORTING
         address                          = ls_bapiaddr3
      EXCEPTIONS
         communication_failure            = 1 MESSAGE lv_msg
         system_failure                   = 2 MESSAGE lv_msg .
  CASE sy-subrc.
    WHEN 0.
      APPEND ls_bapiaddr3 TO gt_bapiaddr3.
    WHEN 1.
      WRITE: 'communication_failure for task', pv_taskname, lv_msg.
    WHEN 2.
      WRITE: 'system_failure', pv_taskname, lv_msg.
  ENDCASE.
  CHECK pv_taskname                       = gv_taskname.
  CLEAR: gv_taskname.
ENDFORM.                    " bapi_receive

Regards,

Clemens

4 REPLIES 4
Read only

Clemenss
Active Contributor
0 Likes
1,202

Obviously my question was a bit too special. I remember I wrote a blog or wiki on that together with the working solution.

Unfortunately the search function(s) do not help me (now) to find it...

Regards,

Clemens

Read only

Former Member
0 Likes
1,202

Can you post the link for your blog or the solution to this problem?

Thanks,

Sanyam Kataria

Read only

Clemenss
Active Contributor
0 Likes
1,202

Here's the link (though it's rather old):

Easily implement parallel processing in online and batch processing - Code Gallery - SCN Wiki

Hope it helps

Regards Clemens

P.S.: I don't remember what the Communication Failure was about - actually an exception for the BAPi called with addition of MESSAGE <mess> may have shown me the solution.

Read only

Former Member
0 Likes
1,202

Thanks a lot that was helpful