michelchenrich

BADI Decoupling

Feb 13th, 2014
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 1.98 KB | None | 0 0
  1. INTERFACE if_document_worker. " BADI Interface
  2.   METHODS:  
  3.     do_something. " I know, no parameters, but it's just an example
  4. ENDINTERFACE.
  5.  
  6. INTERFACE if_document_worker_factory.
  7.   TYPES:
  8.     type_t_workers TYPE STANDARD TABLE OF REF TO if_document_worker.
  9.   METHODS:
  10.     make_for_document IMPORTING document TYPE document_type
  11.                       RETURNING value(workers) TYPE type_t_workers.
  12. ENDINTERFACE.
  13.  
  14. CLASS cl_document_worker_factory DEFINITION. " BADI Factory implementation
  15.   PUBLIC SECTION.
  16.     INTERFACES:
  17.       if_document_worker_factory.
  18. ENDCLASS.
  19. CLASS cl_document_worker_factory IMPLEMENTATION.
  20.   METHOD if_document_worker_factory~make_for_document.
  21.     DATA:
  22.       badi TYPE REF TO document_worker_badi.
  23.  
  24.     GET BADI badi FILTERS document = document.
  25.     workers = badi->imps. " Small hack: This is the BADI's internal list of implementations
  26.   ENDMETHOD.
  27. ENDCLASS.
  28.  
  29. CLASS cl_document_poster DEFINITION. " Class that consumes the BADI
  30.   PUBLIC SECTION.
  31.     METHODS:
  32.       constructor IMPORTING document_worker_factory TYPE REF TO if_document_worker_factory,
  33.       post        IMPORTING document TYPE document_type.
  34.   PRIVATE SECTION.
  35.     DATA:
  36.       document_worker_factory TYPE ref to if_document_worker_factory.
  37.     METHODS:
  38.       execute_workers.
  39. ENDCLASS.
  40. CLASS cl_document_poster implementation.
  41.   METHOD constructor.
  42.     me->document_worker_factory = document_worker_factory.
  43.   ENDMETHOD.
  44.   METHOD post.
  45. *   ...some posting logic
  46.     me->execute_workers( ). " Clean code, right? Extract 'till you drop!
  47. *   ...more posting logic
  48.   ENDMETHOD.
  49.   METHOD execute_workers. " basically, the BADI calls
  50.     DATA:
  51.       document_workers TYPE if_document_worker_factory=>type_t_workers,
  52.       document_worker  TYPE REF TO if_document_worker.
  53.      
  54.     document_workers = document_worker_factory->make_for_document( document ).
  55.     LOOP AT document_workers INTO document_worker.
  56.       document_worker->do_something( ).
  57.     ENDLOOP.
  58.   ENDMETHOD.
  59. ENDCLASS.
Advertisement
Add Comment
Please, Sign In to add comment