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.
Comments are closed.