Similarly to selecting parameters dynamically in the infopackage, as
discussed in the previous post, we may need to select parameters
dynamically in a DTP. In the post below I will review an example of how
to make selections dynamically in the DTP. A practical application of
this approach can be selection of records from a DSO by date range, say
we want to select all records with Date From lower than [Today + 30
days] and Date To greater than [Today - 30 days].
In the Filter selections for the DTP we have to click on the “Routine create” button for the infoobject we want to use:
As DTP selections are stored as a range we have to populate fields of the table l_t_range with appropriate selection parameters.
For the object “Date From” the selection routine may look as follows (we select all records with the Date From before [Today + 30 days]):
form compute_RT_DATEF
tables l_t_range structure rssdlrange
using i_r_request type ref to IF_RSBK_REQUEST_ADMINTAB_VIEW
i_fieldnm type RSFIELDNM
changing p_subrc like sy-subrc.
* Insert source code to current selection field
*$*$ begin of routine - insert your code only below this line *-*
data: l_idx like sy-tabix.
read table l_t_range with key
fieldname = 'RT_DATEF'.
l_idx = sy-tabix.
*....
DATA: cd TYPE D.
cd = sy-datum.
cd = cd + 30.
l_t_range-fieldname = 'RT_DATEF'.
l_t_range-sign = 'I'.
l_t_range-option = 'LE'.
l_t_range-low = cd.
if l_idx <> 0.
modify l_t_range index l_idx.
else.
append l_t_range.
endif.
p_subrc = 0.
*$*$ end of routine - insert your code only before this line *-*
endform.
How to get list of all the target objects having dtp filters with attribute(field) dtp_filter_attr, for example 'FISCPER' ?
ReplyDeleteIn SQL terms:
ReplyDeleteselect distinct t.tgt
from
rsbkselect a -- 'a' from filter_Attribute
inner join rsbkrequest_v t -- 't' from request_Target
ON t.requid = a.requid
where
a.field = dtp_filter_attr -- dtp_filter_attr = 'BUDAT'