cancel
Showing results for 
Search instead for 
Did you mean: 

Filter by default in ALV

Former Member
0 Kudos

Hi,

My requirement is when ALV is displayed first time, it should come up with filter. Could you please let me know how to set filter row by default in ALV.

Thanks,

Accepted Solutions (0)

Answers (3)

Answers (3)

Former Member
0 Kudos

The solution to the problem is to create the filter not while doing the configuration of the alv model (e.g. in wddoinit()), but in an separate eventhandler based on the ON_AFTER_CONFIG ...

Probably the applied filters during model configuration are resetted with the first databinding?



method ON_AFTER_CONF .

DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
lo_interfacecontroller =   wd_this->wd_cpifc_usage_alv( ).

  DATA lo_value TYPE REF TO cl_salv_wd_config_table.
  lo_value = lo_interfacecontroller->get_model(
  ).

* Filtern nach speziellen Serialnummern
* Feld holen
  data lo_field          type ref to cl_salv_wd_field.
  data lo_field_settings type ref to if_salv_wd_field_settings.
  data lo_filter_rule    type ref to cl_salv_wd_filter_rule.

* Filter aktuelles Jahr  
  data low type string.
  low = sy-datum(4).


* Feld/Spalte CALYEAR
  lo_field_settings ?= lo_value.
  lo_field          ?= lo_field_settings->get_field( 'CALYEAR' ).
  lo_field->if_salv_wd_filter~set_filter_allowed( value = abap_true ).

* Filter Rule erstellen
  lo_filter_rule    ?= lo_field->if_salv_wd_filter~create_filter_rule(
                                                    operator   = 'EQ'
                                                    low_value  = low ).

endmethod.

Info: For filtering Patterns e.g. Serialnumbers with 1* use operator CP



* Feld/Spalte SERNR
  lo_field_settings ?= lo_value.
  lo_field          ?= lo_field_settings->get_field( 'SERNR' ).
  lo_field->if_salv_wd_filter~set_filter_allowed( value = abap_true ).


data low type string.
* Serialnumber starting with 1
low = '1*'.

  lo_filter_rule    ?= lo_field->if_salv_wd_filter~create_filter_rule(
                                                    operator   = 'CP'
                                                    low_value  = low ).

Former Member
0 Kudos

Hi

You can use the code below to make the filter visible by default in alv tables.

*declaration of alv usage

DATA lo_cmp_usage TYPE REF TO if_wd_component_usage.

DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .

*declaration of alv usage

*declare config model

DATA lo_config_model_value TYPE REF TO cl_salv_wd_config_table.

DATA lo_settings TYPE REF TO cl_salv_wd_function_std.

lo_cmp_usage = wd_this->wd_cpuse_alv_requi_list( ).

IF lo_cmp_usage->has_active_component( ) IS INITIAL.

lo_cmp_usage->create_component( ).

ENDIF.

lo_interfacecontroller = wd_this->wd_cpifc_alv_requi_list( ).

lo_config_model_value = lo_interfacecontroller->get_model( ).

*to make fileter visible by default

cl_salv_wd_model_table_util=>if_salv_wd_table_util_funcs~set_functions_visible(

r_model = lo_config_model_value

value = cl_wd_uielement=>e_visible-none ).

*to make settings link visible on al table

lo_settings = lo_config_model_value->if_salv_wd_function_settings~get_function_std( if_salv_wd_c_std_functions=>settings ).

lo_settings->set_visible( ).

regards

chythanya

Former Member
0 Kudos

Hi,

Check this code to set ALV Filter.


* create an instance of ALV component
  DATA: LR_CMP_USAGE TYPE REF TO IF_WD_COMPONENT_USAGE.
  DATA: LR_IF_CONTROLLER  TYPE REF TO IWCI_SALV_WD_TABLE,
        LR_CMDL           TYPE REF TO CL_SALV_WD_CONFIG_TABLE.

  LR_CMP_USAGE =   WD_THIS->WD_CPUSE_ALV( ).
  IF LR_CMP_USAGE->HAS_ACTIVE_COMPONENT( ) IS INITIAL.
    LR_CMP_USAGE->CREATE_COMPONENT( ).
  ENDIF.

* get reference to the ALV model
  LR_IF_CONTROLLER = WD_THIS->WD_CPIFC_ALV( ).
  LR_CMDL = LR_IF_CONTROLLER->GET_MODEL( ).

* set ALV Filter
  DATA: LR_FIELD_SETTINGS TYPE REF TO IF_SALV_WD_FIELD_SETTINGS.
  DATA: LR_FIELD TYPE REF TO CL_SALV_WD_FIELD.

  LR_FIELD_SETTINGS ?= LR_CMDL.
  LR_FIELD = LR_FIELD_SETTINGS->GET_FIELD( 'ENAME' ).
  LR_FIELD->IF_SALV_WD_FILTER~CREATE_FILTER_RULE(
  OPERATOR = 'NE'
  LOW_VALUE = ' ' ).

Regards,

Former Member
0 Kudos

Hi experts,

I tried to set my ALV Filter but it is not applied. I always see all the data.

Do I have to do more then this:


* Filtern nach aktuellem Jahr.
* Feld holen
  DATA lo_field          TYPE REF TO cl_salv_wd_field.
  DATA lo_field_settings TYPE REF TO if_salv_wd_field_settings.
  DATA lo_filter_rule    TYPE REF TO cl_salv_wd_filter_rule.
* Filter aktuelles Jahr
  DATA low TYPE string.
  low = sy-datum(4).
* Feld/Spalte CALYEAR
  lo_field_settings ?= lo_value.
  lo_field = lo_field_settings->get_field( 'CALYEAR' ).
  lo_field->if_salv_wd_filter~set_filter_allowed( value = abap_true ).
* Filter Rule erstellen
  lo_filter_rule ?= lo_field->if_salv_wd_filter~create_filter_rule(
                                                    operator   = 'EQ'
                                                    low_value  = low ).

Thanks for the answers.

Best regards,

Volker