Description: The Blog Post is about how to create determination and test it in BOPF framework.
Prerequisite: To know The Steps Of Creating BO Object in BOPF And Also To add Node And Necessary Structures Required For Creating BOBF Application.
Introduction: A determination is an entity of a business object node that is used to provide functions that are automatically executed as soon as a certain trigger condition is fulfilled. A determination is triggered internally on the basis of changes made to the node instance of a business object.
Examples For Determination: Generation Of ID Automatically Via SNRO.
Categories of Determination: In general, BOPF provides the following categories for Determination:
Transient Determination – Modifies only transient fields or nodes. For such determinations no locking is necessary.
Persistent Determination – Modifies transient and persistent fields or nodes. Here locking is necessary.
Let’s start creating with determination in BOBF tcode:
Here, i have previously created business object, and added Node Employee which holds the basic employee details, And also had generated the required combined structure and combined table type
For the employee detail, I want the id to be generated through Snro, So I will create a Determination for this.
Follow The Steps As Shown,
Step1: Choose “Create Determination” in the context menu
of the node.
Once you had clicked on create determination it pop ups the below screen,
Step2: Maintain the basic properties of the new determination
Give the name of your choice to Determination and provide the description.
Give the Determination category
Give the Change Mode:
Persistent Determination => Exclusive Write
Transient Determination => Only Read Mode
Give Determination Class: Choose a class from the BOPF Library or create a new class by forward navigation to implement an individual determination
Step 3: Choose request nodes/ associations and trigger condition
◉ Request Nodes: Nodes, that trigger the determination whenever instances of this node fulfill the trigger condition (create, update, delete, load, determine)
◉ Read Nodes: Nodes that have to been all loaded into the buffer before the determination can start.
◉ Write Nodes: Nodes for which the framework has to ensure, that they are all write-locked before the determination is executed.
Step4: Choose Determination Execution Times.
A determination execution time defines, at which time of the transactional cycle the
trigger condition of that determination should be evaluated.
Step5: Choose Determination Dependencies
Determination dependencies restrict the order, in which the trigger conditions are evaluated. Dependency defines the execution order of determinations:
◉ Necessary Determinations: Determinations, which have to been executed before by the framework.
◉ Dependent Determinations: Determinations that are dependant on the other determination created.
Examples of valid execution orders are:
4, 1, 3, 2, 5 (for example, the determination DET 2 is always executed before the execution of DET 5)
1, 2, 5, 4, 3 (for example, DET 1 is always executed before the execution of DET 2).
Note: You can only choose Dependent Determination if you have created more than one determination.
once you have selected click Enter.
Step6: Now we should write the logic in the Implementation Class that we created.
double click on the class and it will ask you to create object, Click on Yes.
Save it in the package and click Enter.
Step7: You will be able to see the below screen, the First two methods are deprecated avoid using them and write your logic in the last method. i,e /BOBF/IF_FRW_DETERMINATION~EXECUTE :This Method Carries Out The Determination.
Source code
Step8: In the Method Execute, write the below code to generate snro.
DATA: lt type Zan_c_tt, //combined Table type
ls type REF TO ZAN_C_S,//combined Structure
lv_id(3) type c.
io_read->RETRIEVE
exporting
IV_NODE = is_ctx-node_key
IT_KEY = it_key
* IV_BEFORE_IMAGE = ABAP_FAlSE " Data Element for Domain BOOLE: TRUE (="X") and False (=" ")
* IV_FILL_DATA = ABAP_TRUE " Data element for domain BOOLE: TRUE (='X') and False (=' ')
* IT_REQUESTED_ATTRIBUTES = " List of Names (e.g. Fieldnames)
importing
* EO_MESSAGE = " Message Object
ET_DATA = lt
* ET_FAILED_KEY = " Key Table
* ET_NODE_CAT = " Node Category Assignment
).
loop At lt REFERENCE INTO ls.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
NR_RANGE_NR = '01'
OBJECT = 'ZAN_ID'
* QUANTITY = '1'
* SUBOBJECT = ' '
* TOYEAR = '0000'
* IGNORE_BUFFER = ' '
IMPORTING
NUMBER = lv_id
* QUANTITY =
* RETURNCODE =
* EXCEPTIONS
* INTERVAL_NOT_FOUND = 1
* NUMBER_RANGE_NOT_INTERN = 2
* OBJECT_NOT_FOUND = 3
* QUANTITY_IS_0 = 4
* QUANTITY_IS_NOT_1 = 5
* INTERVAL_OVERFLOW = 6
* BUFFER_OVERFLOW = 7
* OTHERS = 8
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ls->Eid = lv_id.
io_modify->UPDATE(
exporting
IV_NODE = is_ctx-node_key
IV_KEY = ls->key
* IV_ROOT_KEY = " NodeID
IS_DATA = ls
* IT_CHANGED_FIELDS = " List of Names (e.g. Fieldnames)
).
About Interface and the Parameters used in method
/BOBF/IF_FRW_DETERMINATION: This interface defines methods for determination execution in BOPF.
Parameter |
Description |
IS_CTX |
Provides context information of the Determination |
IT_KEY
|
Hold keys of the node instances |
IO_READ
|
Hold keys of the node instances |
IO_MODIFY |
Provides write access to the business objects |
EO_MESSAGE |
Holds Message container to return information |
ET_FAILED _KEY |
Holds node instance keys, for which the Determination Criteria Didn’t Match |
Now the determination has been created and implemented.
Let’s Test Your Application In BOBT Tcode
Step1: Run Tcode BOBT and open your Business Object.
Step2: Now Click on create node button as shown,
Step3: Once you click on the add node button You can see the Eid has been generated by snro, that was implemented in Determination Implementation Class.
No comments:
Post a Comment