Selektionsparameter in Suchhilfe Popup vorbelegen

Einfach mal in einem Suchhilfe Popup einen Selektionsparameter vorbelegen. Sollte doch recht einfach sein. Leider lag die Tücke im Detail. Das alleinige Ändern der BOL Collection brachte nur dann einen Erfolg, wenn der User das Suchhilfe Popup öffnet, wieder schliesst und dann erneut öffnet. Nach einem Tag suchen war dann auch schon die Lösung gefunden. Man muss am Ende noch die Parameter Tabelle des betreffenden Kontextes neu generieren. Anbei wie immer das notwendige Coding.

METHOD do_prepare_output.
 DATA: wa_values TYPE adrp,
       lv_name TYPE string,
       lv_attr_name TYPE name_komp.
 DATA: obj_qs TYPE REF TO cl_crm_bol_dquery_service,
       obj_col_params TYPE REF TO if_bol_bo_col,
       obj_current TYPE  REF TO if_bol_bo_property_access,
       obj_iterator TYPE REF TO if_bol_bo_col_iterator.

 CALL METHOD super->do_prepare_output
  EXPORTING
   iv_first_time = iv_first_time.

 IF iv_first_time EQ abap_true.
 * Get dynamic query from context
  obj_qs ?= me->get_current_dquery( ).
  obj_col_params = obj_qs->get_selection_params( ).

  IF obj_col_params IS BOUND.
 * Get empl. responsible lastname
   SELECT SINGLE a~name_last
   INTO wa_values-name_last
   FROM adrp AS a
   INNER JOIN usr21 AS b
   ON a~persnumber = b~persnumber
   WHERE b~bname = sy-uname.

   IF sy-subrc IS INITIAL.
    MOVE wa_values-name_last TO lv_name.
   ENDIF.

 * Get iterator and loop over context nodes
   obj_iterator = obj_col_params->get_iterator( ).
   obj_current ?= obj_iterator->get_first( ).

   WHILE obj_current IS BOUND.
    lv_attr_name = obj_current->get_property_as_string( 'ATTR_NAME' ).

    IF lv_attr_name = 'OWNERLASTNAME'.
     obj_current->set_property_as_string( iv_attr_name = 'LOW'
                                          iv_value     = lv_name ).
    ENDIF.

    obj_current ?= obj_iterator->get_next( ).
   ENDWHILE.

 * Rebuild parameter table
   me->typed_context->search->build_parameter_tab( ).
  ENDIF.

 FREE: obj_qs, obj_current, obj_col_params.
 ENDIF.
 ENDMETHOD.

Die Erweiterung ist in der Methode DO_PREPARE_OUTPUT des jeweiligen View Controllers einzubauen.

Posted on 20. März 2015 in Blog, WebClient(WebUI)

Back to Top