mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 13:03:01 +08:00
279 lines
6.7 KiB
ABAP
279 lines
6.7 KiB
ABAP
CLASS zcl_abapgit_object_avas DEFINITION
|
|
PUBLIC
|
|
INHERITING FROM zcl_abapgit_objects_super
|
|
CREATE PUBLIC .
|
|
|
|
PUBLIC SECTION.
|
|
|
|
INTERFACES zif_abapgit_object .
|
|
PROTECTED SECTION.
|
|
|
|
TYPES:
|
|
BEGIN OF ty_header,
|
|
guid TYPE guid_32,
|
|
attribute TYPE cls_attribute_name,
|
|
object TYPE pak_object_key,
|
|
END OF ty_header .
|
|
TYPES:
|
|
BEGIN OF ty_avas,
|
|
header TYPE ty_header,
|
|
values TYPE cls_value_assignments,
|
|
links TYPE cls_linked_objects,
|
|
END OF ty_avas .
|
|
|
|
METHODS insert_assignments
|
|
IMPORTING
|
|
!is_avas TYPE ty_avas
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS insert_links
|
|
IMPORTING
|
|
!is_avas TYPE ty_avas .
|
|
METHODS instantiate
|
|
RETURNING
|
|
VALUE(ro_avas) TYPE REF TO cl_cls_attr_value_assignment
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
PRIVATE SECTION.
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS ZCL_ABAPGIT_OBJECT_AVAS IMPLEMENTATION.
|
|
|
|
|
|
METHOD insert_assignments.
|
|
|
|
DATA: lt_assignment TYPE STANDARD TABLE OF cls_assignment,
|
|
ls_assignment LIKE LINE OF lt_assignment,
|
|
ls_value LIKE LINE OF is_avas-values.
|
|
|
|
|
|
LOOP AT is_avas-values INTO ls_value.
|
|
CLEAR ls_assignment.
|
|
ls_assignment-guid = is_avas-header-guid.
|
|
ls_assignment-value = ls_value-value.
|
|
ls_assignment-trobjtype = is_avas-header-object-trobjtype.
|
|
ls_assignment-sobj_name = is_avas-header-object-sobj_name.
|
|
ls_assignment-object_type = is_avas-header-object-object_type.
|
|
ls_assignment-sub_key = is_avas-header-object-sub_key.
|
|
ls_assignment-attribute = is_avas-header-attribute.
|
|
ls_assignment-set_by = sy-uname.
|
|
ls_assignment-changed_on = sy-datum.
|
|
ls_assignment-remark = ls_value-remark.
|
|
APPEND ls_assignment TO lt_assignment.
|
|
ENDLOOP.
|
|
|
|
DELETE FROM cls_assignment WHERE guid = is_avas-header-guid.
|
|
|
|
INSERT cls_assignment FROM TABLE lt_assignment.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( |Error inserting into CLS_ASSIGNMENT| ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD insert_links.
|
|
|
|
* todo, how does links work?
|
|
* LOOP AT ls_avas-links INTO ls_linked_obj.
|
|
* ENDLOOP.
|
|
|
|
** DELETE FROM cls_linked_obj WHERE guid = ls_avas-header-guid.
|
|
** INSERT cls_linked_obj FROM TABLE lt_linked.
|
|
* if sy-subrc <> 0.
|
|
* endif.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD instantiate.
|
|
|
|
DATA: lv_id TYPE guid_32,
|
|
lx_err TYPE REF TO cx_root.
|
|
|
|
lv_id = ms_item-obj_name.
|
|
|
|
TRY.
|
|
CREATE OBJECT ro_avas
|
|
EXPORTING
|
|
im_assignment_id = lv_id.
|
|
CATCH cx_pak_wb_object_locked INTO lx_err.
|
|
zcx_abapgit_exception=>raise( |AVAS { lv_id }: locked: { lx_err->get_longtext( ) }| ).
|
|
CATCH cx_pak_not_authorized INTO lx_err.
|
|
zcx_abapgit_exception=>raise( |AVAS { lv_id }: not authorized: { lx_err->get_longtext( ) }| ).
|
|
CATCH cx_pak_invalid_state INTO lx_err.
|
|
zcx_abapgit_exception=>raise( |AVAS { lv_id }: invalid state: { lx_err->get_longtext( ) }| ).
|
|
CATCH cx_pak_invalid_data INTO lx_err.
|
|
zcx_abapgit_exception=>raise( |AVAS { lv_id }: invalid data: { lx_err->get_longtext( ) }| ).
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~changed_by.
|
|
|
|
DATA: lo_avas TYPE REF TO cl_cls_attr_value_assignment.
|
|
|
|
|
|
lo_avas = instantiate( ).
|
|
|
|
lo_avas->if_pak_wb_object~get_last_changed(
|
|
IMPORTING
|
|
ex_changed_by = rv_user ).
|
|
|
|
IF rv_user IS INITIAL.
|
|
rv_user = c_user_unknown.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~delete.
|
|
|
|
DATA: lo_avas TYPE REF TO cl_cls_attr_value_assignment.
|
|
|
|
|
|
lo_avas = instantiate( ).
|
|
|
|
TRY.
|
|
lo_avas->if_cls_attr_value_assignment~lock_and_refresh(
|
|
im_allow_popups = abap_false ).
|
|
CATCH cx_pak_invalid_state
|
|
cx_pak_invalid_data
|
|
cx_pak_not_authorized
|
|
cx_pak_wb_object_locked.
|
|
zcx_abapgit_exception=>raise( |AVAS error| ).
|
|
ENDTRY.
|
|
|
|
lo_avas->if_pak_wb_object~delete( ).
|
|
|
|
lo_avas->if_pak_wb_object~save( ).
|
|
|
|
lo_avas->if_pak_wb_object_internal~unlock( ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~deserialize.
|
|
|
|
DATA: ls_avas TYPE ty_avas.
|
|
|
|
|
|
io_xml->read( EXPORTING iv_name = 'AVAS'
|
|
CHANGING cg_data = ls_avas ).
|
|
|
|
* The AVAS API cannot be used in this case, as it will always create a new GUID
|
|
|
|
ASSERT NOT ls_avas-header-guid IS INITIAL.
|
|
|
|
tadir_insert( iv_package ).
|
|
|
|
insert_assignments( ls_avas ).
|
|
insert_links( ls_avas ).
|
|
|
|
* corr_insert?
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~exists.
|
|
|
|
DATA: lv_guid TYPE cls_assignment-guid.
|
|
|
|
SELECT SINGLE guid FROM cls_assignment INTO lv_guid
|
|
WHERE guid = ms_item-obj_name.
|
|
rv_bool = boolc( sy-subrc = 0 ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_comparator.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_deserialize_steps.
|
|
|
|
DATA: ls_meta TYPE zif_abapgit_definitions=>ty_metadata.
|
|
|
|
ls_meta = get_metadata( ).
|
|
|
|
IF ls_meta-late_deser = abap_true.
|
|
APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps.
|
|
ELSEIF ls_meta-ddic = abap_true.
|
|
APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps.
|
|
ELSE.
|
|
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_metadata.
|
|
|
|
rs_metadata = get_metadata( ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~is_active.
|
|
rv_active = is_active( ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~is_locked.
|
|
|
|
rv_is_locked = exists_a_lock_entry_for(
|
|
iv_lock_object = 'CLS_ENQUEUE_STRU'
|
|
iv_argument = |{ ms_item-obj_name }| ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~jump.
|
|
|
|
zcx_abapgit_exception=>raise( |Todo, AVAS jump| ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~serialize.
|
|
|
|
DATA: lo_avas TYPE REF TO cl_cls_attr_value_assignment,
|
|
ls_avas TYPE ty_avas.
|
|
|
|
FIELD-SYMBOLS: <ls_value> LIKE LINE OF ls_avas-values,
|
|
<ls_link> LIKE LINE OF ls_avas-links.
|
|
|
|
|
|
lo_avas = instantiate( ).
|
|
|
|
ls_avas-header-guid = lo_avas->if_cls_attr_value_assignment~get_guid( ).
|
|
ls_avas-header-attribute = lo_avas->if_cls_attr_value_assignment~get_attribute( ).
|
|
ls_avas-header-object = lo_avas->if_cls_attr_value_assignment~get_object( ).
|
|
|
|
lo_avas->if_cls_attr_value_assignment~get_values(
|
|
IMPORTING
|
|
ex_values = ls_avas-values ).
|
|
|
|
lo_avas->if_cls_attr_value_assignment~get_links(
|
|
IMPORTING
|
|
ex_links = ls_avas-links ).
|
|
|
|
LOOP AT ls_avas-values ASSIGNING <ls_value>.
|
|
CLEAR: <ls_value>-set_by, <ls_value>-changed_on.
|
|
ENDLOOP.
|
|
|
|
LOOP AT ls_avas-links ASSIGNING <ls_link>.
|
|
CLEAR: <ls_link>-set_by, <ls_link>-changed_on.
|
|
ENDLOOP.
|
|
|
|
io_xml->add(
|
|
iv_name = 'AVAS'
|
|
ig_data = ls_avas ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|