Implementation of Validations 
To create a validation, the implementing class of the validation must be implemented. This class corresponds to a common ABAP class (with the /BOBF/IF_FRW_VALIDATION interface implemented). If you create the validation using Business Object Builder (BO Builder), the generated class already implements this interface.
The validation interface /BOBF/IF_FRW_VALIDATION consists of the following methods:
Method |
Description |
|---|---|
CHECK_DELTA |
This optional method checks the relevance of node instances to the execution of the validation, based on changes made since the last validation run (if there was a run) at the field level. For action validations, this method is not executed because changes to action validations are made before this point in time and are therefore not relevant. |
CHECK |
This optional method checks the relevance of node instances to the execution of the validation based on field values. This method does not have access to a before state and is therefore not capable of checking whether any relevant changes were made on node instances. |
EXECUTE |
This mandatory method executes the validation. It has no direct modifying access to the node data but returns a set of failed keys to identify all inconsistent node instances. |
The following source code describes an action validation. The action validation ensures that only node instances with a valid business object partner instance can be processed by the INVOICE_ISSUED action.
Syntax
METHOD /bobf/if_frw_validation~execute.
DATA:
ls_key TYPE /bobf/s_frw_key,
ls_location TYPE /bobf/s_frw_location,
lt_key_link TYPE /bobf/t_frw_key_link,
lo_cm TYPE REF TO cm_bopf_training.
" clear exporting parameter
CLEAR:
et_failed_key,
eo_message.
" get the party node instances of the IT_KEY root instances
io_read->retrieve_by_association(
EXPORTING
iv_node = if_ci_bopf_customer_invoi_c=>sc_node-root
it_key = it_key
iv_association = if_ci_bopf_customer_invoi_c=>sc_association-root-party
iv_fill_data = abap_false
IMPORTING
et_key_link = lt_key_link ).
LOOP AT it_key INTO ls_key.
READ TABLE lt_key_link with KEY source_key = ls_key-key TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
" this node instance has no corresponding party instance
INSERT ls_key INTO TABLE et_failed_key.
CLEAR ls_location.
ls_location-node_key = is_ctx-node_key.
ls_location-key = ls_key-key.
CREATE OBJECT lo_cm
EXPORTING
textid = cm_bopf_training=>missing_bill_to_party
severity = /bobf/cm_frw=>co_severity_error
lifetime = /bobf/if_frw_c=>sc_lifetime_set_by_bopf
symptom = /bobf/if_frw_message_symptoms=>co_bo_inconsistency
ms_origin_location = ls_location.
IF eo_message IS NOT BOUND.
CALL METHOD /bopf/cl_frw_factory=>get_message
RECEIVING
eo_message = eo_message.
ENDIF.
eo_message->add_cm( lo_cm ).
ENDIF.
ENDLOOP.
ENDMETHOD.