mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Merge pull request #1173 from christianguenter2/make_global
lcl_requirement_helper to global
This commit is contained in:
commit
43b71742c1
236
src/utils/zcl_abapgit_requirement_helper.clas.abap
Normal file
236
src/utils/zcl_abapgit_requirement_helper.clas.abap
Normal file
|
@ -0,0 +1,236 @@
|
||||||
|
CLASS zcl_abapgit_requirement_helper DEFINITION
|
||||||
|
PUBLIC
|
||||||
|
FINAL
|
||||||
|
CREATE PUBLIC .
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
TYPES:
|
||||||
|
BEGIN OF ty_requirement_status,
|
||||||
|
met TYPE abap_bool,
|
||||||
|
component TYPE dlvunit,
|
||||||
|
description TYPE text80,
|
||||||
|
installed_release TYPE saprelease,
|
||||||
|
installed_patch TYPE sappatchlv,
|
||||||
|
required_release TYPE saprelease,
|
||||||
|
required_patch TYPE sappatchlv,
|
||||||
|
END OF ty_requirement_status .
|
||||||
|
|
||||||
|
TYPES:
|
||||||
|
ty_requirement_status_tt TYPE STANDARD TABLE OF ty_requirement_status WITH DEFAULT KEY .
|
||||||
|
|
||||||
|
CLASS-METHODS:
|
||||||
|
check_requirements
|
||||||
|
IMPORTING
|
||||||
|
!it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt
|
||||||
|
!iv_show_popup TYPE abap_bool DEFAULT abap_true
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception,
|
||||||
|
|
||||||
|
get_requirement_met_status
|
||||||
|
IMPORTING
|
||||||
|
!it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_status) TYPE ty_requirement_status_tt
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
CLASS-METHODS:
|
||||||
|
show_requirement_popup
|
||||||
|
IMPORTING
|
||||||
|
!it_requirements TYPE ty_requirement_status_tt
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception,
|
||||||
|
|
||||||
|
version_greater_or_equal
|
||||||
|
IMPORTING
|
||||||
|
!is_status TYPE ty_requirement_status
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_true) TYPE abap_bool .
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CLASS zcl_abapgit_requirement_helper IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD check_requirements.
|
||||||
|
|
||||||
|
DATA: lt_met_status TYPE ty_requirement_status_tt,
|
||||||
|
lv_answer TYPE c LENGTH 1.
|
||||||
|
|
||||||
|
lt_met_status = get_requirement_met_status( it_requirements ).
|
||||||
|
|
||||||
|
IF iv_show_popup = abap_true.
|
||||||
|
show_requirement_popup( lt_met_status ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
LOOP AT lt_met_status TRANSPORTING NO FIELDS WHERE met = abap_false.
|
||||||
|
EXIT.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
||||||
|
EXPORTING
|
||||||
|
text_question = 'The project has unmet requirements. Do you want to continue?'
|
||||||
|
IMPORTING
|
||||||
|
answer = lv_answer.
|
||||||
|
IF lv_answer <> '1'.
|
||||||
|
zcx_abapgit_exception=>raise( 'Cancelling because of unmet requirements.' ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD get_requirement_met_status.
|
||||||
|
|
||||||
|
|
||||||
|
DATA: lt_installed TYPE STANDARD TABLE OF cvers_sdu.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_requirement> TYPE zif_abapgit_dot_abapgit=>ty_requirement,
|
||||||
|
<ls_status> TYPE ty_requirement_status,
|
||||||
|
<ls_installed_comp> TYPE cvers_sdu.
|
||||||
|
|
||||||
|
|
||||||
|
CALL FUNCTION 'DELIVERY_GET_INSTALLED_COMPS'
|
||||||
|
TABLES
|
||||||
|
tt_comptab = lt_installed
|
||||||
|
EXCEPTIONS
|
||||||
|
no_release_found = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
zcx_abapgit_exception=>raise( |Error from DELIVERY_GET_INSTALLED_COMPS { sy-subrc }| ) ##no_text.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
LOOP AT it_requirements ASSIGNING <ls_requirement>.
|
||||||
|
APPEND INITIAL LINE TO rt_status ASSIGNING <ls_status>.
|
||||||
|
<ls_status>-component = <ls_requirement>-component.
|
||||||
|
<ls_status>-required_release = <ls_requirement>-min_release.
|
||||||
|
<ls_status>-required_patch = <ls_requirement>-min_patch.
|
||||||
|
|
||||||
|
READ TABLE lt_installed WITH KEY component = <ls_requirement>-component
|
||||||
|
ASSIGNING <ls_installed_comp>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
" Component is installed, requirement is met if the installed version is greater or equal
|
||||||
|
" to the required one.
|
||||||
|
<ls_status>-installed_release = <ls_installed_comp>-release.
|
||||||
|
<ls_status>-installed_patch = <ls_installed_comp>-extrelease.
|
||||||
|
<ls_status>-description = <ls_installed_comp>-desc_text.
|
||||||
|
<ls_status>-met = version_greater_or_equal( <ls_status> ).
|
||||||
|
ELSE.
|
||||||
|
" Component is not installed at all
|
||||||
|
<ls_status>-met = abap_false.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
UNASSIGN <ls_installed_comp>.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD show_requirement_popup.
|
||||||
|
|
||||||
|
|
||||||
|
TYPES: BEGIN OF lty_color_line,
|
||||||
|
color TYPE lvc_t_scol.
|
||||||
|
INCLUDE TYPE ty_requirement_status.
|
||||||
|
TYPES: END OF lty_color_line,
|
||||||
|
lty_color_tab TYPE STANDARD TABLE OF lty_color_line WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
DATA: lo_alv TYPE REF TO cl_salv_table,
|
||||||
|
lo_column TYPE REF TO cl_salv_column,
|
||||||
|
lo_columns TYPE REF TO cl_salv_columns_table,
|
||||||
|
lt_color_table TYPE lty_color_tab,
|
||||||
|
lt_color_negative TYPE lvc_t_scol,
|
||||||
|
lt_color_positive TYPE lvc_t_scol,
|
||||||
|
ls_color TYPE lvc_s_scol,
|
||||||
|
lx_ex TYPE REF TO cx_root.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_line> TYPE lty_color_line,
|
||||||
|
<ls_requirement> LIKE LINE OF it_requirements.
|
||||||
|
|
||||||
|
|
||||||
|
ls_color-color-col = col_negative.
|
||||||
|
APPEND ls_color TO lt_color_negative.
|
||||||
|
|
||||||
|
ls_color-color-col = col_positive.
|
||||||
|
APPEND ls_color TO lt_color_positive.
|
||||||
|
|
||||||
|
CLEAR ls_color.
|
||||||
|
|
||||||
|
LOOP AT it_requirements ASSIGNING <ls_requirement>.
|
||||||
|
APPEND INITIAL LINE TO lt_color_table ASSIGNING <ls_line>.
|
||||||
|
MOVE-CORRESPONDING <ls_requirement> TO <ls_line>.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
LOOP AT lt_color_table ASSIGNING <ls_line>.
|
||||||
|
IF <ls_line>-met = abap_false.
|
||||||
|
<ls_line>-color = lt_color_negative.
|
||||||
|
ELSE.
|
||||||
|
<ls_line>-color = lt_color_positive.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
UNASSIGN <ls_line>.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv
|
||||||
|
CHANGING t_table = lt_color_table ).
|
||||||
|
|
||||||
|
lo_columns = lo_alv->get_columns( ).
|
||||||
|
lo_columns->get_column( 'MET' )->set_short_text( 'Met' ).
|
||||||
|
lo_columns->set_color_column( 'COLOR' ).
|
||||||
|
lo_columns->set_optimize( ).
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'REQUIRED_RELEASE' ).
|
||||||
|
* lo_column->set_fixed_header_text( 'S' ).
|
||||||
|
lo_column->set_short_text( 'Req. Rel.' ).
|
||||||
|
|
||||||
|
lo_column = lo_columns->get_column( 'REQUIRED_PATCH' ).
|
||||||
|
* lo_column->set_fixed_header_text( 'S' ).
|
||||||
|
lo_column->set_short_text( 'Req. SP L.' ).
|
||||||
|
|
||||||
|
lo_alv->set_screen_popup( start_column = 30
|
||||||
|
end_column = 100
|
||||||
|
start_line = 10
|
||||||
|
end_line = 20 ).
|
||||||
|
lo_alv->get_display_settings( )->set_list_header( 'Requirements' ).
|
||||||
|
lo_alv->display( ).
|
||||||
|
|
||||||
|
CATCH cx_salv_msg cx_salv_not_found cx_salv_data_error INTO lx_ex.
|
||||||
|
zcx_abapgit_exception=>raise( lx_ex->get_text( ) ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD version_greater_or_equal.
|
||||||
|
|
||||||
|
DATA: lv_number TYPE numc4 ##NEEDED.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
MOVE EXACT: is_status-installed_release TO lv_number,
|
||||||
|
is_status-installed_patch TO lv_number,
|
||||||
|
is_status-required_release TO lv_number,
|
||||||
|
is_status-required_patch TO lv_number.
|
||||||
|
CATCH cx_sy_conversion_error.
|
||||||
|
" Cannot compare by number, assume requirement not fullfilled (user can force install
|
||||||
|
" anyways if this was an error)
|
||||||
|
rv_true = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
" Versions are comparable by number, compare release and if necessary patch level
|
||||||
|
IF is_status-installed_release > is_status-required_release
|
||||||
|
OR ( is_status-installed_release = is_status-required_release
|
||||||
|
AND ( is_status-required_patch IS INITIAL OR
|
||||||
|
is_status-installed_patch >= is_status-required_patch ) ).
|
||||||
|
|
||||||
|
rv_true = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
56
src/utils/zcl_abapgit_requirement_helper.clas.xml
Normal file
56
src/utils/zcl_abapgit_requirement_helper.clas.xml
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<?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_REQUIREMENT_HELPER</CLSNAME>
|
||||||
|
<VERSION>1</VERSION>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<EXPOSURE>2</EXPOSURE>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSFINAL>X</CLSFINAL>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
</VSEOCLASS>
|
||||||
|
<DESCRIPTIONS>
|
||||||
|
<SEOCOMPOTX>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_REQUIREMENT_HELPER</CLSNAME>
|
||||||
|
<CMPNAME>CHECK_REQUIREMENTS</CMPNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>CHECK_REQUIREMENTS</DESCRIPT>
|
||||||
|
</SEOCOMPOTX>
|
||||||
|
<SEOCOMPOTX>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_REQUIREMENT_HELPER</CLSNAME>
|
||||||
|
<CMPNAME>GET_REQUIREMENT_MET_STATUS</CMPNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>GET_REQUIREMENT_MET_STATUS</DESCRIPT>
|
||||||
|
</SEOCOMPOTX>
|
||||||
|
<SEOCOMPOTX>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_REQUIREMENT_HELPER</CLSNAME>
|
||||||
|
<CMPNAME>SHOW_REQUIREMENT_POPUP</CMPNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>SHOW_REQUIREMENT_POPUP</DESCRIPT>
|
||||||
|
</SEOCOMPOTX>
|
||||||
|
<SEOCOMPOTX>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_REQUIREMENT_HELPER</CLSNAME>
|
||||||
|
<CMPNAME>TY_REQUIREMENT_STATUS</CMPNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>TY_REQUIREMENT_STATUS</DESCRIPT>
|
||||||
|
</SEOCOMPOTX>
|
||||||
|
<SEOCOMPOTX>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_REQUIREMENT_HELPER</CLSNAME>
|
||||||
|
<CMPNAME>TY_REQUIREMENT_STATUS_TT</CMPNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>TY_REQUIREMENT_STATUS_TT</DESCRIPT>
|
||||||
|
</SEOCOMPOTX>
|
||||||
|
<SEOCOMPOTX>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_REQUIREMENT_HELPER</CLSNAME>
|
||||||
|
<CMPNAME>VERSION_GREATER_OR_EQUAL</CMPNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>VERSION_GREATER_OR_EQUAL</DESCRIPT>
|
||||||
|
</SEOCOMPOTX>
|
||||||
|
</DESCRIPTIONS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -569,7 +569,7 @@ CLASS lcl_repo IMPLEMENTATION.
|
||||||
|
|
||||||
lt_requirements = get_dot_abapgit( )->get_data( )-requirements.
|
lt_requirements = get_dot_abapgit( )->get_data( )-requirements.
|
||||||
IF lt_requirements IS NOT INITIAL.
|
IF lt_requirements IS NOT INITIAL.
|
||||||
lcl_requirement_helper=>check_requirements( it_requirements = lt_requirements
|
zcl_abapgit_requirement_helper=>check_requirements( it_requirements = lt_requirements
|
||||||
iv_show_popup = abap_true ).
|
iv_show_popup = abap_true ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
|
|
@ -2,220 +2,4 @@
|
||||||
*& Include zabapgit_requirements
|
*& Include zabapgit_requirements
|
||||||
*&---------------------------------------------------------------------*
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
* todo, include will be deleted later
|
||||||
* CLASS lcl_requirement_helper DEFINITION
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
*
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_requirement_helper DEFINITION FINAL.
|
|
||||||
PUBLIC SECTION.
|
|
||||||
TYPES:
|
|
||||||
BEGIN OF ty_requirement_status,
|
|
||||||
met TYPE abap_bool,
|
|
||||||
component TYPE dlvunit,
|
|
||||||
description TYPE text80,
|
|
||||||
installed_release TYPE saprelease,
|
|
||||||
installed_patch TYPE sappatchlv,
|
|
||||||
required_release TYPE saprelease,
|
|
||||||
required_patch TYPE sappatchlv,
|
|
||||||
END OF ty_requirement_status,
|
|
||||||
ty_requirement_status_tt TYPE STANDARD TABLE OF ty_requirement_status WITH DEFAULT KEY.
|
|
||||||
CLASS-METHODS:
|
|
||||||
"! Check if the given requirements are met with user interaction
|
|
||||||
"! <p>
|
|
||||||
"! Shows a popup if requested and asks the user if he wants to continue if there are unmet
|
|
||||||
"! requirements. If not an exception is raised.
|
|
||||||
"! </p>
|
|
||||||
"! @parameter it_requirements | The requirements to check
|
|
||||||
"! @parameter iv_show_popup | Show popup with requirements
|
|
||||||
"! @raising zcx_abapgit_exception | Cancelled by user or internal error
|
|
||||||
check_requirements IMPORTING it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt
|
|
||||||
iv_show_popup TYPE abap_bool DEFAULT abap_true
|
|
||||||
RAISING zcx_abapgit_exception,
|
|
||||||
"! Get a table with information about each requirement
|
|
||||||
"! @parameter it_requirements | Requirements
|
|
||||||
"! @parameter rt_status | Result
|
|
||||||
"! @raising zcx_abapgit_exception | Internal error
|
|
||||||
get_requirement_met_status IMPORTING it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt
|
|
||||||
RETURNING VALUE(rt_status) TYPE ty_requirement_status_tt
|
|
||||||
RAISING zcx_abapgit_exception.
|
|
||||||
PRIVATE SECTION.
|
|
||||||
CLASS-METHODS:
|
|
||||||
show_requirement_popup IMPORTING it_requirements TYPE ty_requirement_status_tt
|
|
||||||
RAISING zcx_abapgit_exception,
|
|
||||||
version_greater_or_equal IMPORTING is_status TYPE ty_requirement_status
|
|
||||||
RETURNING VALUE(rv_true) TYPE abap_bool.
|
|
||||||
ENDCLASS. "lcl_requirement_helper DEFINITION
|
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
* CLASS lcl_requirement_helper IMPLEMENTATION
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
*
|
|
||||||
*----------------------------------------------------------------------*
|
|
||||||
CLASS lcl_requirement_helper IMPLEMENTATION.
|
|
||||||
METHOD check_requirements.
|
|
||||||
DATA: lt_met_status TYPE ty_requirement_status_tt,
|
|
||||||
lv_answer TYPE c LENGTH 1.
|
|
||||||
|
|
||||||
lt_met_status = get_requirement_met_status( it_requirements ).
|
|
||||||
|
|
||||||
IF iv_show_popup = abap_true.
|
|
||||||
show_requirement_popup( lt_met_status ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
LOOP AT lt_met_status TRANSPORTING NO FIELDS WHERE met = abap_false.
|
|
||||||
EXIT.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
CALL FUNCTION 'POPUP_TO_CONFIRM'
|
|
||||||
EXPORTING
|
|
||||||
text_question = 'The project has unmet requirements. Do you want to continue?'
|
|
||||||
IMPORTING
|
|
||||||
answer = lv_answer.
|
|
||||||
IF lv_answer <> '1'.
|
|
||||||
zcx_abapgit_exception=>raise( 'Cancelling because of unmet requirements.' ).
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
|
||||||
ENDMETHOD. "check_requirements
|
|
||||||
|
|
||||||
METHOD get_requirement_met_status.
|
|
||||||
|
|
||||||
DATA: lt_installed TYPE STANDARD TABLE OF cvers_sdu.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_requirement> TYPE zif_abapgit_dot_abapgit=>ty_requirement,
|
|
||||||
<ls_status> TYPE ty_requirement_status,
|
|
||||||
<ls_installed_comp> TYPE cvers_sdu.
|
|
||||||
|
|
||||||
|
|
||||||
CALL FUNCTION 'DELIVERY_GET_INSTALLED_COMPS'
|
|
||||||
TABLES
|
|
||||||
tt_comptab = lt_installed
|
|
||||||
EXCEPTIONS
|
|
||||||
no_release_found = 1
|
|
||||||
OTHERS = 2.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
zcx_abapgit_exception=>raise( |Error from DELIVERY_GET_INSTALLED_COMPS { sy-subrc }| ) ##no_text.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
LOOP AT it_requirements ASSIGNING <ls_requirement>.
|
|
||||||
APPEND INITIAL LINE TO rt_status ASSIGNING <ls_status>.
|
|
||||||
<ls_status>-component = <ls_requirement>-component.
|
|
||||||
<ls_status>-required_release = <ls_requirement>-min_release.
|
|
||||||
<ls_status>-required_patch = <ls_requirement>-min_patch.
|
|
||||||
|
|
||||||
READ TABLE lt_installed WITH KEY component = <ls_requirement>-component
|
|
||||||
ASSIGNING <ls_installed_comp>.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
" Component is installed, requirement is met if the installed version is greater or equal
|
|
||||||
" to the required one.
|
|
||||||
<ls_status>-installed_release = <ls_installed_comp>-release.
|
|
||||||
<ls_status>-installed_patch = <ls_installed_comp>-extrelease.
|
|
||||||
<ls_status>-description = <ls_installed_comp>-desc_text.
|
|
||||||
<ls_status>-met = version_greater_or_equal( <ls_status> ).
|
|
||||||
ELSE.
|
|
||||||
" Component is not installed at all
|
|
||||||
<ls_status>-met = abap_false.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
UNASSIGN <ls_installed_comp>.
|
|
||||||
ENDLOOP.
|
|
||||||
ENDMETHOD. "get_requirement_met_status
|
|
||||||
|
|
||||||
METHOD version_greater_or_equal.
|
|
||||||
DATA: lv_number TYPE numc4 ##NEEDED.
|
|
||||||
|
|
||||||
TRY.
|
|
||||||
MOVE EXACT: is_status-installed_release TO lv_number,
|
|
||||||
is_status-installed_patch TO lv_number,
|
|
||||||
is_status-required_release TO lv_number,
|
|
||||||
is_status-required_patch TO lv_number.
|
|
||||||
CATCH cx_sy_conversion_error.
|
|
||||||
" Cannot compare by number, assume requirement not fullfilled (user can force install
|
|
||||||
" anyways if this was an error)
|
|
||||||
rv_true = abap_false.
|
|
||||||
RETURN.
|
|
||||||
ENDTRY.
|
|
||||||
|
|
||||||
" Versions are comparable by number, compare release and if necessary patch level
|
|
||||||
IF is_status-installed_release > is_status-required_release
|
|
||||||
OR ( is_status-installed_release = is_status-required_release
|
|
||||||
AND ( is_status-required_patch IS INITIAL OR
|
|
||||||
is_status-installed_patch >= is_status-required_patch ) ).
|
|
||||||
|
|
||||||
rv_true = abap_true.
|
|
||||||
ENDIF.
|
|
||||||
ENDMETHOD. "version_greater_or_equal
|
|
||||||
|
|
||||||
METHOD show_requirement_popup.
|
|
||||||
|
|
||||||
TYPES: BEGIN OF lty_color_line,
|
|
||||||
color TYPE lvc_t_scol.
|
|
||||||
INCLUDE TYPE ty_requirement_status.
|
|
||||||
TYPES: END OF lty_color_line,
|
|
||||||
lty_color_tab TYPE STANDARD TABLE OF lty_color_line WITH DEFAULT KEY.
|
|
||||||
|
|
||||||
DATA: lo_alv TYPE REF TO cl_salv_table,
|
|
||||||
lo_column TYPE REF TO cl_salv_column,
|
|
||||||
lo_columns TYPE REF TO cl_salv_columns_table,
|
|
||||||
lt_color_table TYPE lty_color_tab,
|
|
||||||
lt_color_negative TYPE lvc_t_scol,
|
|
||||||
lt_color_positive TYPE lvc_t_scol,
|
|
||||||
ls_color TYPE lvc_s_scol,
|
|
||||||
lx_ex TYPE REF TO cx_root.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_line> TYPE lty_color_line,
|
|
||||||
<ls_requirement> LIKE LINE OF it_requirements.
|
|
||||||
|
|
||||||
|
|
||||||
ls_color-color-col = col_negative.
|
|
||||||
APPEND ls_color TO lt_color_negative.
|
|
||||||
|
|
||||||
ls_color-color-col = col_positive.
|
|
||||||
APPEND ls_color TO lt_color_positive.
|
|
||||||
|
|
||||||
CLEAR ls_color.
|
|
||||||
|
|
||||||
LOOP AT it_requirements ASSIGNING <ls_requirement>.
|
|
||||||
APPEND INITIAL LINE TO lt_color_table ASSIGNING <ls_line>.
|
|
||||||
MOVE-CORRESPONDING <ls_requirement> TO <ls_line>.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
LOOP AT lt_color_table ASSIGNING <ls_line>.
|
|
||||||
IF <ls_line>-met = abap_false.
|
|
||||||
<ls_line>-color = lt_color_negative.
|
|
||||||
ELSE.
|
|
||||||
<ls_line>-color = lt_color_positive.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
UNASSIGN <ls_line>.
|
|
||||||
|
|
||||||
TRY.
|
|
||||||
cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv
|
|
||||||
CHANGING t_table = lt_color_table ).
|
|
||||||
|
|
||||||
lo_columns = lo_alv->get_columns( ).
|
|
||||||
lo_columns->get_column( 'MET' )->set_short_text( 'Met' ).
|
|
||||||
lo_columns->set_color_column( 'COLOR' ).
|
|
||||||
lo_columns->set_optimize( ).
|
|
||||||
|
|
||||||
lo_column = lo_columns->get_column( 'REQUIRED_RELEASE' ).
|
|
||||||
* lo_column->set_fixed_header_text( 'S' ).
|
|
||||||
lo_column->set_short_text( 'Req. Rel.' ).
|
|
||||||
|
|
||||||
lo_column = lo_columns->get_column( 'REQUIRED_PATCH' ).
|
|
||||||
* lo_column->set_fixed_header_text( 'S' ).
|
|
||||||
lo_column->set_short_text( 'Req. SP L.' ).
|
|
||||||
|
|
||||||
lo_alv->set_screen_popup( start_column = 30
|
|
||||||
end_column = 100
|
|
||||||
start_line = 10
|
|
||||||
end_line = 20 ).
|
|
||||||
lo_alv->get_display_settings( )->set_list_header( 'Requirements' ).
|
|
||||||
lo_alv->display( ).
|
|
||||||
|
|
||||||
CATCH cx_salv_msg cx_salv_not_found cx_salv_data_error INTO lx_ex.
|
|
||||||
zcx_abapgit_exception=>raise( lx_ex->get_text( ) ).
|
|
||||||
ENDTRY.
|
|
||||||
ENDMETHOD. "show_requirement_popup
|
|
||||||
ENDCLASS. "lcl_requirement_helper IMPLEMENTATION
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user