Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- INTERFACE if_document_worker. " BADI Interface
- METHODS:
- do_something. " I know, no parameters, but it's just an example
- ENDINTERFACE.
- INTERFACE if_document_worker_factory.
- TYPES:
- type_t_workers TYPE STANDARD TABLE OF REF TO if_document_worker.
- METHODS:
- make_for_document IMPORTING document TYPE document_type
- RETURNING value(workers) TYPE type_t_workers.
- ENDINTERFACE.
- CLASS cl_document_worker_factory DEFINITION. " BADI Factory implementation
- PUBLIC SECTION.
- INTERFACES:
- if_document_worker_factory.
- ENDCLASS.
- CLASS cl_document_worker_factory IMPLEMENTATION.
- METHOD if_document_worker_factory~make_for_document.
- DATA:
- badi TYPE REF TO document_worker_badi.
- GET BADI badi FILTERS document = document.
- workers = badi->imps. " Small hack: This is the BADI's internal list of implementations
- ENDMETHOD.
- ENDCLASS.
- CLASS cl_document_poster DEFINITION. " Class that consumes the BADI
- PUBLIC SECTION.
- METHODS:
- constructor IMPORTING document_worker_factory TYPE REF TO if_document_worker_factory,
- post IMPORTING document TYPE document_type.
- PRIVATE SECTION.
- DATA:
- document_worker_factory TYPE ref to if_document_worker_factory.
- METHODS:
- execute_workers.
- ENDCLASS.
- CLASS cl_document_poster implementation.
- METHOD constructor.
- me->document_worker_factory = document_worker_factory.
- ENDMETHOD.
- METHOD post.
- * ...some posting logic
- me->execute_workers( ). " Clean code, right? Extract 'till you drop!
- * ...more posting logic
- ENDMETHOD.
- METHOD execute_workers. " basically, the BADI calls
- DATA:
- document_workers TYPE if_document_worker_factory=>type_t_workers,
- document_worker TYPE REF TO if_document_worker.
- document_workers = document_worker_factory->make_for_document( document ).
- LOOP AT document_workers INTO document_worker.
- document_worker->do_something( ).
- ENDLOOP.
- ENDMETHOD.
- ENDCLASS.
Advertisement
Add Comment
Please, Sign In to add comment