AVAS support (#1609)

* AVAS #1360

* AVAS support

* fix linter errors
This commit is contained in:
Lars Hvam 2018-07-12 16:55:46 +02:00 committed by GitHub
parent bf3e5df77e
commit 6bdb655435
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 274 additions and 0 deletions

View File

@ -0,0 +1,256 @@
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 .
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.
lv_id = ms_item-obj_name.
TRY.
CREATE OBJECT ro_avas
EXPORTING
im_assignment_id = lv_id.
CATCH cx_pak_wb_object_locked
cx_pak_not_authorized
cx_pak_invalid_state
cx_pak_invalid_data.
zcx_abapgit_exception=>raise( |AVAS error| ).
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~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
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_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
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.

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_AVAS</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>AVAS</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>