В первой части я кратко описал основные возможности фреймворка BOPF. Теперь рассмотрим практический пример работы с фреймворком.
Работать мы будем с объектом /BOBF/CONF_LIBRARY
Класс /BOBF/IF_CONF_LIBRARY_C содержит все константы, необходимые для работы с данным BO.
Для работы с содержимым BO прежде всего нужно создать сервисный менеджер. В качестве параметра указываем константу с ключом, которые берется из класса с константами. Имя класса с константами специфично для каждого BO и указано в его параметрах.
1 |
DATA(lo_srv_mng) = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( /bobf/if_conf_library_c=>sc_bo_key ). |
Затем можно сделать запрос и получить все данные этого BO
1 2 3 4 5 6 7 |
lo_srv_mng->query( EXPORTING iv_query_key = /bobf/if_conf_library_c=>sc_query-root-select_all IMPORTING eo_message = DATA(lo_message) et_key = DATA(lt_root_key) ). |
В результате, в таблице lt_root_key будет список ключей всех записей этого BO. Ключ представляет собой уникальный идентификатор конкретной записи.
Чтобы получить сами данные по этим ключам необходимо выполнить запрос retrieve. Параметром передаем таблицу ключей, которую получили в результате запроса query.
1 2 3 4 5 6 7 8 9 |
DATA: lt_data TYPE /bobf/t_conf_lib. lo_srv_mng->retrieve( EXPORTING iv_node_key = /bobf/if_conf_library_c=>sc_node-root it_key = lt_root_key IMPORTING et_data = lt_data et_failed_key = DATA(lt_failed_key) ). |
В таблице lt_failed_key будет перечень ключей, получение которых не произошло.
Теперь в таблице lt_data хранятся служебные идентификаторы и непосредственно сами данные этой ноды.
Для получения данных суб-ноды необходимо использовать метод retrieve_by_association
1 2 3 4 5 6 7 8 9 10 11 12 |
DATA: lt_desc TYPE TABLE OF /bobf/s_conf_libt. lo_srv_mng->retrieve_by_association( EXPORTING iv_node_key = /bobf/if_conf_library_c=>sc_node-root it_key = lt_root_key iv_association = /bobf/if_conf_library_c=>sc_association-root-description iv_fill_data = abap_true IMPORTING et_data = lt_desc et_target_key = lt_failed_key ). |
В данном случае используются следующие параметры:
iv_node_key — ключ родительской ноды.
it_key — перечень ключей, по которому нужно получить данные.
iv_association — ключ ассоциации суб-ноды, данные которой нужно получить.
iv_fill_data — параметр, указывающий необходимость получить данные. Если он равен abap_false, то метод вернет только идентификаторы KEY, PARENT_KEY (идентификатор родительской записи) и ROOT_KEY( идентификатор корневой записи)