├── src
├── zaor_review_closing.enho.d773c878.abap
├── package.devc.xml
├── zif_aor_types.intf.xml
├── zif_aor_constants.intf.xml
├── zcl_aor_time.clas.xml
├── zcl_aor_ci.clas.xml
├── zcl_aor_service.clas.xml
├── zcl_aor_checklist.clas.xml
├── zcl_aor_comments.clas.xml
├── zcl_aor_transport.clas.xml
├── zcx_aor_error.clas.xml
├── zcl_aor_diff.clas.xml
├── zcl_im_review_approved.clas.xml
├── zreview.prog.xml
├── zreview_approved.sxci.xml
├── zaor_object_tt.ttyp.xml
├── zaor_import_default_checklist.prog.xml
├── zcl_aor_review.clas.xml
├── zaor_base.dtel.xml
├── zaor_topic.dtel.xml
├── zaor_review_id.dtel.xml
├── zaor_status.dtel.xml
├── zaor_ci_filter.dtel.xml
├── zif_aor_constants.intf.abap
├── zaor_checklist_description.dtel.xml
├── zaor_checklist_answer.dtel.xml
├── zaor_checklist_item.dtel.xml
├── zaor_number_of_approvals.dtel.xml
├── zaor_base.doma.xml
├── zaor_status.doma.xml
├── zaor_object.tabl.xml
├── zcl_aor_transport.clas.locals_imp.abap
├── zaor_ci_filter.doma.xml
├── zaor_checklist.tabl.xml
├── zaor_configs.tobj.xml
├── zaor_approvals.tabl.xml
├── zaor_import_default_checklist.prog.abap
├── zaor_review_obj.tabl.xml
├── zcl_aor_time.clas.abap
├── zaor_config.tabl.xml
├── zaor_checked.tabl.xml
├── zaor_review_closing.enho.xml
├── zaor_review.tabl.xml
├── zaor_comment.tabl.xml
├── zaor_aprove_bef_trans.dtel.xml
├── zaor_code_com.tabl.xml
├── zcl_im_review_approved.clas.abap
├── zcl_aor_checklist.clas.abap
├── zabapopenreview.msag.xml
├── zif_aor_types.intf.abap
├── zcx_aor_error.clas.abap
├── zcl_aor_transport.clas.abap
├── zcl_aor_service.clas.abap
├── zcl_aor_comments.clas.abap
├── zaor_review.ssst.xml
├── zcl_aor_diff.clas.testclasses.abap
├── zcl_aor_ci.clas.abap
├── zcl_aor_review.clas.abap
└── zcl_aor_diff.clas.abap
├── .abapgit.xml
├── README.md
├── abaplint.json
└── LICENSE
/src/zaor_review_closing.enho.d773c878.abap:
--------------------------------------------------------------------------------
1 | "Name: \FU:TR_RELEASE_REQUEST\SE:END\EI
2 | ENHANCEMENT 0 ZAOR_REVIEW_CLOSING.
3 | IF lv_subrc = 0.
4 | UPDATE zaor_review SET status = zif_aor_constants=>c_status-closed
5 | WHERE trkorr = iv_trkorr.
6 | ENDIF.
7 | ENDENHANCEMENT.
8 |
--------------------------------------------------------------------------------
/src/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Source-Coude Revies
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/zif_aor_types.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_AOR_TYPES
7 | E
8 | Types
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/zif_aor_constants.intf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZIF_AOR_CONSTANTS
7 | E
8 | Constants
9 | 2
10 | 1
11 | X
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/zcl_aor_time.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AOR_TIME
7 | E
8 | Time
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_aor_ci.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AOR_CI
7 | E
8 | Code Inspector
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_aor_service.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AOR_SERVICE
7 | E
8 | Service
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_aor_checklist.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AOR_CHECKLIST
7 | E
8 | Checklist
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_aor_comments.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AOR_COMMENTS
7 | E
8 | Comments
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_aor_transport.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AOR_TRANSPORT
7 | E
8 | Transport
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/.abapgit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | E
6 | /src/
7 | PREFIX
8 |
9 | /.gitignore
10 | /LICENSE
11 | /README.md
12 | /package.json
13 | /.travis.yml
14 | /abaplint.json
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/zcx_aor_error.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_AOR_ERROR
7 | E
8 | Error
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zcl_aor_diff.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AOR_DIFF
7 | E
8 | Diff
9 | 1
10 | X
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/zcl_im_review_approved.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_IM_REVIEW_APPROVED
7 | E
8 | Imp. class for BAdI imp. ZREVIEW_APPROVED
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zreview.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZREVIEW
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 |
14 | R
15 | abapOpenReview
16 | 14
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/zreview_approved.sxci.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | ZREVIEW_APPROVED
8 | Code review approved
9 | ZCL_IM_REVIEW_APPROVED
10 | CTS_REQUEST_CHECK
11 | IF_EX_CTS_REQUEST_CHECK
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zaor_object_tt.ttyp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_OBJECT_TT
7 | E
8 | ZAOR_OBJECT
9 | S
10 | STRU
11 | T
12 | D
13 | N
14 | ZAOR_OBJECT Table Type
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/zaor_import_default_checklist.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_IMPORT_DEFAULT_CHECKLIST
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 |
14 | R
15 | Import default checklist
16 | 24
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/zcl_aor_review.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AOR_REVIEW
7 | E
8 | Review
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | I
17 | 001
18 | Failed to fetch diff. Reason:
19 | 58
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/zaor_base.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_BASE
7 | E
8 | ZAOR_BASE
9 | 04
10 | 10
11 | 20
12 | 40
13 | Base
14 | Base
15 | Base
16 | Base
17 | Base
18 | E
19 | D
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zaor_topic.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_TOPIC
7 | E
8 | SYSUUID_C22
9 | 22
10 | 10
11 | 20
12 | 40
13 | Topic
14 | Topic
15 | Topic
16 | Topic
17 | Topic
18 | E
19 | D
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zaor_review_id.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_REVIEW_ID
7 | E
8 | TRKORR
9 | 20
10 | 10
11 | 20
12 | 40
13 | Review
14 | Review
15 | Review
16 | Review
17 | Review
18 | E
19 | D
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zaor_status.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_STATUS
7 | E
8 | ZAOR_STATUS
9 | 06
10 | 10
11 | 20
12 | 40
13 | Status
14 | Status
15 | Status
16 | Status
17 | Status
18 | E
19 | D
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zaor_ci_filter.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_CI_FILTER
7 | E
8 | ZAOR_CI_FILTER
9 | 09
10 | 10
11 | 20
12 | 40
13 | CI Filter
14 | CI Filter
15 | CI Filter
16 | CI Filter
17 | CI Filter
18 | E
19 | D
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zif_aor_constants.intf.abap:
--------------------------------------------------------------------------------
1 | INTERFACE zif_aor_constants
2 | PUBLIC.
3 |
4 | CONSTANTS:
5 | BEGIN OF c_status,
6 | open TYPE zaor_status VALUE 'O' ##NO_TEXT,
7 | closed TYPE zaor_status VALUE 'C' ##NO_TEXT,
8 | approved TYPE zaor_status VALUE 'A' ##NO_TEXT,
9 | END OF c_status.
10 |
11 | CONSTANTS:
12 | BEGIN OF c_base,
13 | transport TYPE zaor_base VALUE 'T',
14 | developer TYPE zaor_base VALUE 'D',
15 | object TYPE zaor_base VALUE 'O',
16 | END OF c_base.
17 |
18 | CONSTANTS:
19 | BEGIN OF c_ci_filter,
20 | none TYPE zaor_ci_filter VALUE 'N',
21 | object TYPE zaor_ci_filter VALUE 'O',
22 | include TYPE zaor_ci_filter VALUE 'I',
23 | lines TYPE zaor_ci_filter VALUE 'L',
24 | END OF c_ci_filter.
25 |
26 | ENDINTERFACE.
27 |
--------------------------------------------------------------------------------
/src/zaor_checklist_description.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_CHECKLIST_DESCRIPTION
7 | E
8 | TEXT300
9 | 55
10 | 10
11 | 20
12 | 40
13 | Description
14 | Description
15 | Descriptio
16 | Description
17 | Description
18 | E
19 | D
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zaor_checklist_answer.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_CHECKLIST_ANSWER
7 | E
8 | TEXT10
9 | 55
10 | 10
11 | 20
12 | 40
13 | Checklist Answer
14 | Checklist Answer
15 | Checklist
16 | Checklist Answer
17 | Checklist Answer
18 | E
19 | D
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/zaor_checklist_item.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_CHECKLIST_ITEM
7 | E
8 | 55
9 | 10
10 | 20
11 | 40
12 | Checklist Item
13 | Checklist Item
14 | Checklist
15 | Checklist Item
16 | Checklist Item
17 | E
18 | CHAR
19 | 000006
20 | 000006
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/zaor_number_of_approvals.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_NUMBER_OF_APPROVALS
7 | E
8 | 26
9 | 07
10 | 16
11 | 26
12 | Number of review approvals
13 | Number of review approvals
14 | N. app.
15 | Number approvals
16 | Number of review approvals
17 | E
18 | NUMC
19 | 000002
20 | 000002
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/zaor_base.doma.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_BASE
7 | E
8 | CHAR
9 | 000001
10 | 000001
11 | X
12 | Base
13 |
14 |
15 |
16 | 0001
17 | E
18 | T
19 | Transport
20 |
21 |
22 | 0002
23 | E
24 | D
25 | Developer
26 |
27 |
28 | 0003
29 | E
30 | O
31 | Object
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/zaor_status.doma.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_STATUS
7 | E
8 | CHAR
9 | 000001
10 | 000001
11 | X
12 | Status
13 |
14 |
15 |
16 | 0001
17 | E
18 | O
19 | Open
20 |
21 |
22 | 0002
23 | E
24 | C
25 | Closed
26 |
27 |
28 | 0003
29 | E
30 | A
31 | Approved
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/zaor_object.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_OBJECT
7 | E
8 | INTTAB
9 | Object
10 | 1
11 |
12 |
13 |
14 | PGMID
15 | PGMID
16 | 0
17 | E
18 |
19 |
20 | OBJECT
21 | TROBJTYPE
22 | 0
23 | D
24 | E
25 |
26 |
27 | OBJ_NAME
28 | TROBJ_NAME
29 | 0
30 | E
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/src/zcl_aor_transport.clas.locals_imp.abap:
--------------------------------------------------------------------------------
1 | *"* use this source file for the definition and implementation of
2 | *"* local helper classes, interface definitions and type
3 | *"* declarations
4 |
5 | CLASS lcl_range DEFINITION.
6 |
7 | PUBLIC SECTION.
8 | CLASS-METHODS trkorr
9 | IMPORTING
10 | iv_trkorr TYPE trkorr
11 | RETURNING
12 | VALUE(rt_trkorr) TYPE trrngtrkor_tab.
13 |
14 | ENDCLASS. "lcl_range DEFINITION
15 |
16 | *----------------------------------------------------------------------*
17 | * CLASS lcl_range IMPLEMENTATION
18 | *----------------------------------------------------------------------*
19 | *
20 | *----------------------------------------------------------------------*
21 | CLASS lcl_range IMPLEMENTATION.
22 |
23 | METHOD trkorr.
24 |
25 | FIELD-SYMBOLS: LIKE LINE OF rt_trkorr.
26 |
27 |
28 | APPEND INITIAL LINE TO rt_trkorr ASSIGNING .
29 | -sign = 'I'.
30 | -option = 'EQ'.
31 | -low = iv_trkorr.
32 |
33 | ENDMETHOD. "trkorr
34 |
35 | ENDCLASS. "lcl_range IMPLEMENTATION
36 |
--------------------------------------------------------------------------------
/src/zaor_ci_filter.doma.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_CI_FILTER
7 | E
8 | CHAR
9 | 000001
10 | 000001
11 | X
12 | CI filter
13 |
14 |
15 |
16 | 0001
17 | E
18 | N
19 | None
20 |
21 |
22 | 0002
23 | E
24 | O
25 | Object
26 |
27 |
28 | 0003
29 | E
30 | I
31 | Include
32 |
33 |
34 | 0004
35 | E
36 | L
37 | Lines
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/src/zaor_checklist.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_CHECKLIST
7 | E
8 | TRANSP
9 | Checklist Settings
10 | X
11 | A
12 | 1
13 |
14 |
15 | ZAOR_CHECKLIST
16 | A
17 | 0
18 | APPL1
19 | X
20 | N
21 |
22 |
23 |
24 | ITEM
25 | X
26 | ZAOR_CHECKLIST_ITEM
27 | 0
28 | X
29 | E
30 |
31 |
32 | DESCRIPTION
33 | ZAOR_CHECKLIST_DESCRIPTION
34 | 0
35 | E
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/src/zaor_configs.tobj.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_CONFIG
7 | S
8 | X
9 | CUST
10 | 2
11 | 3
12 |
13 |
14 | E
15 | ZAOR_CONFIG
16 | S
17 | abapOpenReview configuration
18 |
19 |
20 |
21 | ZAOR_CONFIG
22 | S
23 | ZAOR_CONFIG
24 | X
25 | X
26 |
27 |
28 |
29 |
30 | ZAOR_CONFIG
31 | &NC&
32 |
33 |
34 | ZAOR_CONFIG
35 | ZAOR_CONFIG
36 | 1
37 | 0001
38 | X
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/zaor_approvals.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_APPROVALS
7 | E
8 | TRANSP
9 | review approvals
10 | A
11 | 3
12 |
13 |
14 | ZAOR_APPROVALS
15 | A
16 | 1
17 | APPL1
18 | X
19 | X
20 |
21 |
22 |
23 | REVIEW_ID
24 | X
25 | ZAOR_REVIEW_ID
26 | 0
27 | X
28 | E
29 |
30 |
31 | APPROVED_BY
32 | X
33 | XUBNAME
34 | 0
35 | X
36 | E
37 |
38 |
39 | TIMESTAMP
40 | TIMESTAMP
41 | 0
42 | E
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/src/zaor_import_default_checklist.prog.abap:
--------------------------------------------------------------------------------
1 | *&---------------------------------------------------------------------*
2 | *& Report ZAOR_IMPORT_DEFAULT_CHECKLIST
3 | *&
4 | *&---------------------------------------------------------------------*
5 | *&
6 | *&
7 | *&---------------------------------------------------------------------*
8 | REPORT zaor_import_default_checklist.
9 |
10 | START-OF-SELECTION.
11 | DATA: lt_checklist TYPE STANDARD TABLE OF zaor_checklist,
12 | lv_item_no TYPE zaor_checklist_item.
13 | FIELD-SYMBOLS: TYPE zaor_checklist.
14 |
15 | SELECT MAX( item ) FROM zaor_checklist
16 | INTO lv_item_no.
17 | lv_item_no = lv_item_no + 1.
18 |
19 | APPEND INITIAL LINE TO lt_checklist ASSIGNING .
20 | -item = lv_item_no.
21 | -description = 'Dependencies changed in other transport requests?'.
22 | lv_item_no = lv_item_no + 1.
23 | APPEND INITIAL LINE TO lt_checklist ASSIGNING .
24 | -item = lv_item_no.
25 | -description = 'All associated Customizing-Settings contained in transport request ' &&
26 | 'or are already created manually /via ALE-transfer in target system ' &&
27 | '(e.g. Characteristics in CT04, Classes in CL02)?'.
28 | lv_item_no = lv_item_no + 1.
29 | APPEND INITIAL LINE TO lt_checklist ASSIGNING .
30 | -item = lv_item_no.
31 | -description = 'API-Major-Changes (class, function-module etc.) bumped to dependents?'.
32 |
33 | INSERT zaor_checklist FROM TABLE lt_checklist.
34 |
--------------------------------------------------------------------------------
/src/zaor_review_obj.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_REVIEW_OBJ
7 | E
8 | TRANSP
9 | X
10 | Objects
11 | A
12 | 1
13 |
14 |
15 | ZAOR_REVIEW_OBJ
16 | A
17 | 3
18 | APPL1
19 | N
20 |
21 |
22 |
23 | REVIEW_ID
24 | X
25 | ZAOR_REVIEW_ID
26 | 0
27 | X
28 | E
29 |
30 |
31 | AS4POS
32 | X
33 | DDPOSITION
34 | 0
35 | X
36 | E
37 |
38 |
39 | .INCLUDE
40 | 0
41 | ZAOR_OBJECT
42 | S
43 | Object
44 | S
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/src/zcl_aor_time.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_aor_time DEFINITION
2 | PUBLIC
3 | FINAL
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | CLASS-METHODS format_timestamp
9 | IMPORTING
10 | !iv_timestamp TYPE timestamp
11 | RETURNING
12 | VALUE(rv_text) TYPE string .
13 | CLASS-METHODS format_date_time
14 | IMPORTING
15 | !iv_date TYPE d
16 | !iv_time TYPE t
17 | RETURNING
18 | VALUE(rv_text) TYPE string .
19 | PROTECTED SECTION.
20 | PRIVATE SECTION.
21 | ENDCLASS.
22 |
23 |
24 |
25 | CLASS ZCL_AOR_TIME IMPLEMENTATION.
26 |
27 |
28 | METHOD format_date_time.
29 | DATA: lv_cdate(10) TYPE c,
30 | lv_ctime(8) TYPE c.
31 |
32 | WRITE iv_date TO lv_cdate.
33 | WRITE iv_time TO lv_ctime.
34 | CONCATENATE lv_cdate lv_ctime INTO rv_text SEPARATED BY space.
35 |
36 | ENDMETHOD.
37 |
38 |
39 | METHOD format_timestamp.
40 |
41 | DATA: lv_time LIKE sy-uzeit,
42 | lv_date LIKE sy-datum,
43 | lv_ctime TYPE c LENGTH 8,
44 | lv_cdate TYPE c LENGTH 10,
45 | lv_zone_app_server TYPE ttzcu-tzonesys.
46 |
47 | SELECT SINGLE tzonesys FROM ttzcu INTO lv_zone_app_server.
48 | CONVERT TIME STAMP iv_timestamp TIME ZONE lv_zone_app_server
49 | INTO DATE lv_date TIME lv_time.
50 |
51 | WRITE lv_date TO lv_cdate.
52 | WRITE lv_time TO lv_ctime.
53 | CONCATENATE lv_cdate lv_ctime INTO rv_text SEPARATED BY space.
54 |
55 | ENDMETHOD.
56 | ENDCLASS.
57 |
--------------------------------------------------------------------------------
/src/zaor_config.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_CONFIG
7 | E
8 | TRANSP
9 | X
10 | abapOpenReview configuration
11 | X
12 | C
13 | 3
14 |
15 |
16 | ZAOR_CONFIG
17 | A
18 | 0
19 | APPL2
20 | X
21 | X
22 | X
23 |
24 |
25 |
26 | MANDT
27 | X
28 | MANDT
29 | 0
30 | X
31 | E
32 |
33 |
34 | APPROVE_BEFORE_TRANSPORT_REQ
35 | ZAOR_APROVE_BEF_TRANS
36 | 0
37 | X
38 | F
39 | E
40 |
41 |
42 |
43 |
44 | ZAOR_CONFIG
45 | &NC&
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # abapOpenReview
2 | ABAP Review Tool
3 |
4 | ## Design goals
5 |
6 | * Work via SAP GUI(ie. no Eclipse integration)
7 | * Version requirement: 702
8 | * Customizable and extendable
9 | * Install via [abapGit](https://github.com/larshp/abapGit)
10 |
11 | ## Integration in the transport system
12 | abapOpenReview comes with two transport system enhancements:
13 | * When a transport request contains code diff, it must be approved before the transport request can be released. This check can be deactivated.
14 | * Reviews are closed after a transport request is released.
15 |
16 | ## Default checklist
17 | The repository contains the program `zaor_import_default_checklist` to import a default checklist with the following items:
18 | - `Dependencies changed in other transport requests?` When yes, the code will proparly break in target system, when this transport request is transported before the transport requests with the dependencies.
19 | - `All associated Customizing-Settings contained in transport request or are already created manually /via ALE-transfer in target system (e.g. Characteristics in CT04, Classes in CL02)?`: Not all Customizing-Settings are transported automatically e.g. the characteristics in transaction CT04, the classes in transaction CL02 (both from the classification API) or z-tables not marked correctly as customizing-tables. In this point we should make sure, that the Customizing-Settings between source and target system don't differ.
20 | - `API-Major-Changes (class, function-module etc.) bumped to dependents?`: When your transport request introduces major-changes, the dependents, which uses the APIs, can break. In this point we should make sure, that the dependents are compatible with the new API.
21 |
--------------------------------------------------------------------------------
/src/zaor_checked.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_CHECKED
7 | E
8 | TRANSP
9 | Checklist Results
10 | A
11 | 1
12 |
13 |
14 | ZAOR_CHECKED
15 | A
16 | 3
17 | APPL1
18 | N
19 |
20 |
21 |
22 | REVIEW_ID
23 | X
24 | ZAOR_REVIEW_ID
25 | 0
26 | X
27 | E
28 |
29 |
30 | ITEM
31 | X
32 | ZAOR_CHECKLIST_ITEM
33 | 0
34 | X
35 | E
36 |
37 |
38 | ANSWER
39 | ZAOR_CHECKLIST_ANSWER
40 | 0
41 | E
42 |
43 |
44 | BNAME
45 | XUBNAME
46 | 0
47 | E
48 |
49 |
50 | TIMESTAMP
51 | TIMESTAMP
52 | 0
53 | E
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/src/zaor_review_closing.enho.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HOOK_IMPL
6 | Review closing while transport release
7 |
8 | R3TR
9 | FUGR
10 | SCTS_RELEASE
11 | FUGR
12 | SCTS_RELEASE
13 | SAPLSCTS_RELEASE
14 |
15 |
16 |
17 | SAPLSCTS_RELEASE
18 | D
19 | \FU:TR_RELEASE_REQUEST\SE:END\EI
20 |
21 |
22 |
23 |
24 | \FU:TR_RELEASE_REQUEST\SE:END\EI
25 | d773c878
26 |
27 |
28 |
29 |
30 |
31 | 000D3A8FA0651EEB9EDF5FFD038648DE
32 | E
33 | 1
34 | AAI=
35 |
36 |
37 |
38 | 000D3A8FA0651EEB9EDF5FFD038648DE
39 | E
40 | 0001
41 | X
42 | R
43 | 057
44 | Review closing while transport release
45 |
46 |
47 |
48 |
49 |
50 |
51 | R3TR
52 |
53 | ZAOR_REVIEW_CLOSING
54 | 000D3A8FA0651EEB9EDF5FFD038648DE
55 | 0001
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/src/zaor_review.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_REVIEW
7 | E
8 | TRANSP
9 | Review
10 | A
11 | 1
12 |
13 |
14 | ZAOR_REVIEW
15 | A
16 | 1
17 | APPL1
18 | N
19 |
20 |
21 |
22 | REVIEW_ID
23 | X
24 | ZAOR_REVIEW_ID
25 | 0
26 | X
27 | E
28 |
29 |
30 | STATUS
31 | ZAOR_STATUS
32 | 0
33 | X
34 | F
35 | E
36 |
37 |
38 | BASE
39 | ZAOR_BASE
40 | 0
41 | X
42 | F
43 | E
44 |
45 |
46 | RESPONSIBLE
47 | XUBNAME
48 | 0
49 | E
50 |
51 |
52 | CI_FILTER
53 | ZAOR_CI_FILTER
54 | 0
55 | X
56 | F
57 | E
58 |
59 |
60 | TRKORR
61 | TRKORR
62 | 0
63 | E
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/src/zaor_comment.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_COMMENT
7 | E
8 | TRANSP
9 | Comments
10 | A
11 | 1
12 |
13 |
14 | ZAOR_COMMENT
15 | A
16 | 1
17 | APPL1
18 | N
19 |
20 |
21 |
22 | REVIEW_ID
23 | X
24 | ZAOR_REVIEW_ID
25 | 0
26 | X
27 | E
28 |
29 |
30 | TOPIC
31 | X
32 | ZAOR_TOPIC
33 | 0
34 | X
35 | E
36 |
37 |
38 | TIMESTAMP
39 | X
40 | TIMESTAMP
41 | 0
42 | X
43 | E
44 |
45 |
46 | TEXT
47 | 0
48 | g
49 | 000008
50 | STRG
51 | STRG
52 |
53 |
54 | BNAME
55 | XUBNAME
56 | 0
57 | E
58 |
59 |
60 | CLOSED
61 | FLAG
62 | 0
63 | X
64 | F
65 | E
66 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/src/zaor_aprove_bef_trans.dtel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_APROVE_BEF_TRANS
7 | E
8 | SAP_BOOL
9 | 55
10 | 10
11 | 20
12 | 40
13 | Approve review before transport request release required
14 | Aprove review before transport request release required
15 | approve
16 | Approve review req.
17 | Aprove review before transport request r
18 | E
19 | D
20 |
21 |
22 |
23 |
24 | DE
25 |
26 | E
27 | E
28 | 0001
29 | X
30 | 00002
31 | A
32 |
33 |
34 | DOKU
35 | ZAOR_APROVE_BEF_TRANS
36 | DE
37 | E
38 | S_DOCU_SHOW
39 | S_DOCUS1
40 | 00001
41 | 072
42 |
43 |
44 |
45 | U1
46 | &DEFINITION&
47 |
48 |
49 | AS
50 | Indicates, that a review must be approved before it can be closed and
51 |
52 |
53 | the transport request can be released.
54 |
55 |
56 | AS
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/src/zaor_code_com.tabl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_CODE_COM
7 | E
8 | TRANSP
9 | X
10 | Code comment
11 | A
12 | 3
13 |
14 |
15 | ZAOR_CODE_COM
16 | A
17 | 1
18 | APPL1
19 | X
20 | X
21 |
22 |
23 |
24 | REVIEW_ID
25 | X
26 | ZAOR_REVIEW_ID
27 | 0
28 | X
29 | E
30 |
31 |
32 | TOPIC
33 | X
34 | ZAOR_TOPIC
35 | 0
36 | X
37 | E
38 |
39 |
40 | .INCLUDE
41 | 0
42 | ZAOR_OBJECT
43 | S
44 | Object
45 | S
46 |
47 |
48 | NEW_LINE
49 | 0
50 | N
51 | 000012
52 | NUMC
53 | 000006
54 | NUMC
55 | New line
56 |
57 |
58 | OLD_LINE
59 | 0
60 | N
61 | 000012
62 | NUMC
63 | 000006
64 | NUMC
65 | old line
66 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/src/zcl_im_review_approved.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_im_review_approved DEFINITION
2 | PUBLIC
3 | FINAL
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | INTERFACES if_ex_cts_request_check .
9 | PROTECTED SECTION.
10 | PRIVATE SECTION.
11 | ENDCLASS.
12 |
13 |
14 |
15 | CLASS zcl_im_review_approved IMPLEMENTATION.
16 |
17 |
18 | METHOD if_ex_cts_request_check~check_before_add_objects.
19 | ENDMETHOD.
20 |
21 |
22 | METHOD if_ex_cts_request_check~check_before_changing_owner.
23 | ENDMETHOD.
24 |
25 |
26 | METHOD if_ex_cts_request_check~check_before_creation.
27 | ENDMETHOD.
28 |
29 |
30 | METHOD if_ex_cts_request_check~check_before_release.
31 | DATA: lv_review_id TYPE zaor_review-review_id,
32 | lv_status TYPE zaor_status,
33 | lo_review TYPE REF TO zcl_aor_review,
34 | lo_error TYPE REF TO zcx_aor_error,
35 | lv_msg TYPE string.
36 |
37 | IF type <> 'K'.
38 | RETURN.
39 | ENDIF.
40 |
41 | SELECT COUNT(*) FROM zaor_config WHERE approve_before_transport_req = abap_true.
42 | IF sy-subrc <> 0.
43 | RETURN.
44 | ENDIF.
45 |
46 | TRY.
47 |
48 | SELECT SINGLE review_id status FROM zaor_review
49 | INTO (lv_review_id, lv_status)
50 | WHERE review_id = request.
51 | IF sy-subrc <> 0.
52 | zcl_aor_service=>open( iv_trkorr = request
53 | iv_base = zif_aor_constants=>c_base-transport
54 | iv_ci_filter = zif_aor_constants=>c_ci_filter-none ).
55 | lv_review_id = request.
56 | lv_status = zif_aor_constants=>c_status-open.
57 | ENDIF.
58 |
59 | CREATE OBJECT lo_review
60 | EXPORTING
61 | iv_review_id = lv_review_id.
62 | " when transport request contains code diff, review must be approved or closed
63 | IF lo_review->diff( ) IS NOT INITIAL AND lv_status = zif_aor_constants=>c_status-open.
64 | MESSAGE s011(zabapopenreview) RAISING cancel.
65 | ENDIF.
66 | CATCH zcx_aor_error INTO lo_error.
67 | lv_msg = lo_error->get_text( ).
68 | MESSAGE s012(zabapopenreview) WITH lv_msg RAISING cancel.
69 | ENDTRY.
70 |
71 |
72 | ENDMETHOD.
73 |
74 |
75 | METHOD if_ex_cts_request_check~check_before_release_slin.
76 | ENDMETHOD.
77 | ENDCLASS.
78 |
--------------------------------------------------------------------------------
/src/zcl_aor_checklist.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_aor_checklist DEFINITION
2 | PUBLIC
3 | FINAL
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 |
8 | TYPES:
9 | BEGIN OF ty_checklist,
10 | description TYPE zaor_checklist-description.
11 | INCLUDE TYPE zaor_checked.
12 | TYPES: END OF ty_checklist.
13 |
14 | TYPES:
15 | ty_checklist_tt TYPE STANDARD TABLE OF ty_checklist WITH DEFAULT KEY.
16 |
17 | METHODS constructor
18 | IMPORTING
19 | !io_review TYPE REF TO zcl_aor_review.
20 | METHODS list
21 | RETURNING
22 | VALUE(rt_list) TYPE ty_checklist_tt.
23 | METHODS answer
24 | IMPORTING
25 | !iv_item TYPE zaor_checklist_item
26 | !iv_answer TYPE zaor_checklist_answer.
27 | PROTECTED SECTION.
28 | PRIVATE SECTION.
29 |
30 | DATA mo_review TYPE REF TO zcl_aor_review .
31 | ENDCLASS.
32 |
33 |
34 |
35 | CLASS ZCL_AOR_CHECKLIST IMPLEMENTATION.
36 |
37 |
38 | METHOD answer.
39 |
40 | DATA: ls_answer TYPE zaor_checked.
41 |
42 |
43 | ls_answer-review_id = mo_review->header( )-review_id.
44 | ls_answer-item = iv_item.
45 | ls_answer-answer = iv_answer.
46 | ls_answer-bname = sy-uname.
47 | GET TIME STAMP FIELD ls_answer-timestamp.
48 |
49 | MODIFY zaor_checked FROM ls_answer.
50 |
51 | ENDMETHOD.
52 |
53 |
54 | METHOD constructor.
55 |
56 | mo_review = io_review.
57 |
58 | ENDMETHOD.
59 |
60 |
61 | METHOD list.
62 |
63 | DATA: lt_checked TYPE STANDARD TABLE OF zaor_checked WITH DEFAULT KEY,
64 | lv_review_id TYPE zaor_review-review_id.
65 |
66 | FIELD-SYMBOLS: LIKE LINE OF rt_list,
67 | LIKE LINE OF lt_checked.
68 |
69 |
70 | SELECT * FROM zaor_checklist
71 | INTO CORRESPONDING FIELDS OF TABLE rt_list.
72 |
73 | lv_review_id = mo_review->header( )-review_id.
74 |
75 | * todo, outer join instead?
76 | SELECT * FROM zaor_checked
77 | INTO TABLE lt_checked
78 | WHERE review_id = lv_review_id.
79 |
80 | LOOP AT rt_list ASSIGNING .
81 | READ TABLE lt_checked ASSIGNING WITH KEY item = -item.
82 | IF sy-subrc = 0.
83 | MOVE-CORRESPONDING TO .
84 | ENDIF.
85 | ENDLOOP.
86 |
87 | ENDMETHOD.
88 | ENDCLASS.
89 |
--------------------------------------------------------------------------------
/src/zabapopenreview.msag.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZABAPOPENREVIEW
7 | E
8 | abapOpenReview
9 |
10 |
11 |
12 | E
13 | ZABAPOPENREVIEW
14 | 000
15 | Some comments still pending
16 |
17 |
18 | E
19 | ZABAPOPENREVIEW
20 | 001
21 | Review closed
22 |
23 |
24 | E
25 | ZABAPOPENREVIEW
26 | 002
27 | Not found
28 |
29 |
30 | E
31 | ZABAPOPENREVIEW
32 | 003
33 | Unknown action
34 |
35 |
36 | E
37 | ZABAPOPENREVIEW
38 | 004
39 | Transport released
40 |
41 |
42 | E
43 | ZABAPOPENREVIEW
44 | 005
45 | Navigation not possible for object type
46 |
47 |
48 | E
49 | ZABAPOPENREVIEW
50 | 006
51 | Downloaded to &1
52 |
53 |
54 | E
55 | ZABAPOPENREVIEW
56 | 007
57 | No comments
58 |
59 |
60 | E
61 | ZABAPOPENREVIEW
62 | 008
63 | Topic is new. Can't be closed.
64 |
65 |
66 | E
67 | ZABAPOPENREVIEW
68 | 009
69 | You already approved this review.
70 |
71 |
72 | E
73 | ZABAPOPENREVIEW
74 | 010
75 | Review must be approved before it can be closed.
76 |
77 |
78 | E
79 | ZABAPOPENREVIEW
80 | 011
81 | Review must be approved before the transport request can be released.
82 |
83 |
84 | E
85 | ZABAPOPENREVIEW
86 | 012
87 | Failed to check code diff. Reason: &1.
88 |
89 |
90 |
91 |
92 |
93 |
--------------------------------------------------------------------------------
/src/zif_aor_types.intf.abap:
--------------------------------------------------------------------------------
1 | INTERFACE zif_aor_types
2 | PUBLIC .
3 |
4 | TYPES:
5 | BEGIN OF ty_comment.
6 | INCLUDE TYPE zaor_comment.
7 | INCLUDE TYPE zaor_object.
8 | TYPES: time_formatted TYPE string,
9 | new_line TYPE zaor_code_com-new_line,
10 | old_line TYPE zaor_code_com-old_line,
11 | END OF ty_comment.
12 |
13 | TYPES: ty_vrso_tt TYPE STANDARD TABLE OF vrso WITH DEFAULT KEY.
14 | TYPES: ty_review_tt TYPE STANDARD TABLE OF zaor_review WITH DEFAULT KEY.
15 | TYPES: ty_comment_tt TYPE STANDARD TABLE OF ty_comment WITH DEFAULT KEY .
16 | TYPES:
17 | BEGIN OF ty_transport.
18 | INCLUDE TYPE e070.
19 | TYPES: as4text TYPE e07t-as4text,
20 | END OF ty_transport.
21 | TYPES:
22 | ty_transport_tt TYPE STANDARD TABLE OF ty_transport WITH DEFAULT KEY .
23 | TYPES:
24 | ty_code_comment_tt TYPE HASHED TABLE OF zaor_code_com WITH UNIQUE KEY
25 | pgmid object obj_name new_line old_line.
26 |
27 | TYPES: BEGIN OF ty_diff_st,
28 | new TYPE c LENGTH 6,
29 | old TYPE c LENGTH 6,
30 | updkz TYPE c LENGTH 1,
31 | code TYPE text255,
32 | END OF ty_diff_st.
33 | TYPES: ty_diff_tt TYPE STANDARD TABLE OF ty_diff_st WITH DEFAULT KEY.
34 | TYPES: BEGIN OF ty_enh_diff_st,
35 | type TYPE enhtooltype,
36 | id TYPE i,
37 | full_name TYPE string,
38 | diff TYPE ty_diff_tt,
39 | END OF ty_enh_diff_st.
40 | TYPES: ty_enh_diff_tt TYPE STANDARD TABLE OF ty_enh_diff_st
41 | WITH NON-UNIQUE KEY id.
42 |
43 | TYPES: BEGIN OF ty_ci_st,
44 | header TYPE sciins_inf,
45 | results TYPE scit_alvlist,
46 | chkvinf TYPE scichkv_hd,
47 | END OF ty_ci_st.
48 |
49 | TYPES: BEGIN OF ty_diff_list_st,
50 | object TYPE zaor_object,
51 | last_changed_date TYPE d,
52 | last_changed_time TYPE t,
53 | diff TYPE ty_diff_tt,
54 | enhanced_object TYPE zaor_object,
55 | enhancement_diff TYPE ty_enh_diff_tt,
56 | END OF ty_diff_list_st.
57 | TYPES: ty_diff_list_tt TYPE STANDARD TABLE OF ty_diff_list_st WITH DEFAULT KEY.
58 |
59 | TYPES:
60 | BEGIN OF ty_header.
61 | INCLUDE TYPE zaor_review.
62 | TYPES: as4text TYPE e07t-as4text,
63 | END OF ty_header.
64 | TYPES: BEGIN OF ty_boundary_line,
65 | start TYPE i,
66 | end TYPE i,
67 | END OF ty_boundary_line.
68 |
69 | TYPES BEGIN OF ty_approval_st.
70 | INCLUDE TYPE zaor_approvals.
71 | TYPES time_formatted TYPE string.
72 | TYPES END OF ty_approval_st.
73 | TYPES: ty_approvals_tt TYPE STANDARD TABLE OF ty_approval_st WITH DEFAULT KEY.
74 | TYPES: ty_boundary_lines_tt TYPE STANDARD TABLE OF ty_boundary_line.
75 | TYPES: ty_r_status TYPE RANGE OF zaor_status.
76 |
77 | ENDINTERFACE.
78 |
--------------------------------------------------------------------------------
/src/zcx_aor_error.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcx_aor_error DEFINITION
2 | PUBLIC
3 | INHERITING FROM cx_static_check
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | INTERFACES if_t100_message .
9 |
10 | CONSTANTS:
11 | BEGIN OF comments_pending,
12 | msgid TYPE symsgid VALUE 'ZABAPOPENREVIEW',
13 | msgno TYPE symsgno VALUE '000',
14 | attr1 TYPE scx_attrname VALUE '',
15 | attr2 TYPE scx_attrname VALUE '',
16 | attr3 TYPE scx_attrname VALUE '',
17 | attr4 TYPE scx_attrname VALUE '',
18 | END OF comments_pending .
19 | CONSTANTS:
20 | BEGIN OF review_closed,
21 | msgid TYPE symsgid VALUE 'ZABAPOPENREVIEW',
22 | msgno TYPE symsgno VALUE '001',
23 | attr1 TYPE scx_attrname VALUE '',
24 | attr2 TYPE scx_attrname VALUE '',
25 | attr3 TYPE scx_attrname VALUE '',
26 | attr4 TYPE scx_attrname VALUE '',
27 | END OF review_closed .
28 | CONSTANTS:
29 | BEGIN OF not_found,
30 | msgid TYPE symsgid VALUE 'ZABAPOPENREVIEW',
31 | msgno TYPE symsgno VALUE '002',
32 | attr1 TYPE scx_attrname VALUE '',
33 | attr2 TYPE scx_attrname VALUE '',
34 | attr3 TYPE scx_attrname VALUE '',
35 | attr4 TYPE scx_attrname VALUE '',
36 | END OF not_found .
37 | CONSTANTS:
38 | BEGIN OF unknown_action,
39 | msgid TYPE symsgid VALUE 'ZABAPOPENREVIEW',
40 | msgno TYPE symsgno VALUE '003',
41 | attr1 TYPE scx_attrname VALUE '',
42 | attr2 TYPE scx_attrname VALUE '',
43 | attr3 TYPE scx_attrname VALUE '',
44 | attr4 TYPE scx_attrname VALUE '',
45 | END OF unknown_action .
46 | CONSTANTS:
47 | BEGIN OF transport_released,
48 | msgid TYPE symsgid VALUE 'ZABAPOPENREVIEW',
49 | msgno TYPE symsgno VALUE '004',
50 | attr1 TYPE scx_attrname VALUE '',
51 | attr2 TYPE scx_attrname VALUE '',
52 | attr3 TYPE scx_attrname VALUE '',
53 | attr4 TYPE scx_attrname VALUE '',
54 | END OF transport_released .
55 | CONSTANTS:
56 | BEGIN OF no_comments,
57 | msgid TYPE symsgid VALUE 'ZABAPOPENREVIEW',
58 | msgno TYPE symsgno VALUE '007',
59 | attr1 TYPE scx_attrname VALUE '',
60 | attr2 TYPE scx_attrname VALUE '',
61 | attr3 TYPE scx_attrname VALUE '',
62 | attr4 TYPE scx_attrname VALUE '',
63 | END OF no_comments .
64 | CONSTANTS:
65 | BEGIN OF close_new_topic,
66 | msgid TYPE symsgid VALUE 'ZABAPOPENREVIEW',
67 | msgno TYPE symsgno VALUE '008',
68 | attr1 TYPE scx_attrname VALUE '',
69 | attr2 TYPE scx_attrname VALUE '',
70 | attr3 TYPE scx_attrname VALUE '',
71 | attr4 TYPE scx_attrname VALUE '',
72 | END OF close_new_topic .
73 | CONSTANTS:
74 | BEGIN OF already_approved,
75 | msgid TYPE symsgid VALUE 'ZABAPOPENREVIEW',
76 | msgno TYPE symsgno VALUE '009',
77 | attr1 TYPE scx_attrname VALUE '',
78 | attr2 TYPE scx_attrname VALUE '',
79 | attr3 TYPE scx_attrname VALUE '',
80 | attr4 TYPE scx_attrname VALUE '',
81 | END OF already_approved .
82 | CONSTANTS:
83 | BEGIN OF approve_before,
84 | msgid TYPE symsgid VALUE 'ZABAPOPENREVIEW',
85 | msgno TYPE symsgno VALUE '010',
86 | attr1 TYPE scx_attrname VALUE '',
87 | attr2 TYPE scx_attrname VALUE '',
88 | attr3 TYPE scx_attrname VALUE '',
89 | attr4 TYPE scx_attrname VALUE '',
90 | END OF approve_before .
91 |
92 | METHODS constructor
93 | IMPORTING
94 | !textid LIKE if_t100_message=>t100key OPTIONAL
95 | !previous LIKE previous OPTIONAL .
96 | protected section.
97 | private section.
98 | ENDCLASS.
99 |
100 |
101 |
102 | CLASS ZCX_AOR_ERROR IMPLEMENTATION.
103 |
104 |
105 | method CONSTRUCTOR.
106 | CALL METHOD SUPER->CONSTRUCTOR
107 | EXPORTING
108 | PREVIOUS = PREVIOUS
109 | .
110 | clear me->textid.
111 | if textid is initial.
112 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID.
113 | else.
114 | IF_T100_MESSAGE~T100KEY = TEXTID.
115 | endif.
116 | endmethod.
117 | ENDCLASS.
118 |
--------------------------------------------------------------------------------
/src/zcl_aor_transport.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_aor_transport DEFINITION
2 | PUBLIC
3 | FINAL
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | *"* public components of class ZCL_AOR_TRANSPORT
9 | *"* do not include other source files here!!!
10 | CLASS-METHODS get_description
11 | IMPORTING
12 | !iv_trkorr TYPE trkorr
13 | RETURNING
14 | VALUE(rv_text) TYPE as4text .
15 | CLASS-METHODS get_developer
16 | IMPORTING
17 | !iv_trkorr TYPE trkorr
18 | RETURNING
19 | VALUE(rv_user) TYPE e070-as4user .
20 | CLASS-METHODS list_developers
21 | IMPORTING
22 | !iv_trkorr TYPE trkorr .
23 | CLASS-METHODS list_objects
24 | IMPORTING
25 | !iv_trkorr TYPE trkorr
26 | RETURNING
27 | VALUE(rt_data) TYPE e071_t .
28 | CLASS-METHODS list_open
29 | IMPORTING
30 | !it_trkorr TYPE trrngtrkor_tab OPTIONAL
31 | !iv_as4user TYPE e070-as4user DEFAULT sy-uname
32 | RETURNING
33 | VALUE(rt_data) TYPE zif_aor_types=>ty_transport_tt .
34 | CLASS-METHODS validate_open
35 | IMPORTING
36 | !iv_trkorr TYPE trkorr
37 | RAISING
38 | zcx_aor_error .
39 | PROTECTED SECTION.
40 | *"* protected components of class ZCL_AOR_TRANSPORT
41 | *"* do not include other source files here!!!
42 | PRIVATE SECTION.
43 | *"* private components of class ZCL_AOR_TRANSPORT
44 | *"* do not include other source files here!!!
45 | ENDCLASS.
46 |
47 |
48 |
49 | CLASS zcl_aor_transport IMPLEMENTATION.
50 |
51 |
52 | METHOD get_description.
53 |
54 | SELECT SINGLE as4text INTO rv_text
55 | FROM e07t
56 | WHERE trkorr = iv_trkorr
57 | AND langu = sy-langu.
58 | IF sy-subrc <> 0.
59 | SELECT SINGLE as4text INTO rv_text
60 | FROM e07t
61 | WHERE trkorr = iv_trkorr
62 | AND langu = 'E'. "#EC CI_SUBRC
63 | ENDIF.
64 |
65 | ENDMETHOD.
66 |
67 |
68 | METHOD get_developer.
69 |
70 | SELECT SINGLE as4user FROM e070
71 | INTO rv_user
72 | WHERE trkorr = iv_trkorr. "#EC CI_SUBRC
73 | ASSERT sy-subrc = 0 AND NOT rv_user IS INITIAL.
74 |
75 | ENDMETHOD.
76 |
77 |
78 | METHOD list_developers.
79 |
80 | * select * from e070 where strkorr = iv_trkorr
81 |
82 | * delete adjacent duplicates
83 | * todo
84 |
85 | ENDMETHOD.
86 |
87 |
88 | METHOD list_objects.
89 |
90 | DATA: lt_e070 TYPE TABLE OF e070.
91 |
92 |
93 | SELECT * FROM e070 INTO TABLE lt_e070
94 | WHERE strkorr = iv_trkorr. "#EC CI_SUBRC
95 | IF lines( lt_e070 ) = 0.
96 | RETURN.
97 | ENDIF.
98 |
99 | SELECT * FROM e071 INTO TABLE rt_data
100 | FOR ALL ENTRIES IN lt_e070
101 | WHERE trkorr = lt_e070-trkorr. "#EC CI_SUBRC
102 |
103 | ENDMETHOD.
104 |
105 |
106 | METHOD list_open.
107 |
108 | DATA: lv_index LIKE sy-tabix.
109 |
110 | FIELD-SYMBOLS: LIKE LINE OF rt_data.
111 |
112 |
113 | SELECT * FROM e070 INTO CORRESPONDING FIELDS OF TABLE rt_data
114 | WHERE as4user = iv_as4user
115 | AND trstatus = 'D'
116 | AND trfunction = 'K'
117 | AND strkorr = ''
118 | AND trkorr IN it_trkorr ##too_many_itab_fields. "#EC CI_SUBRC
119 |
120 | LOOP AT rt_data ASSIGNING .
121 | lv_index = sy-tabix.
122 |
123 | SELECT COUNT(*) FROM zaor_review WHERE
124 | trkorr = -trkorr. "#EC CI_NOFIELD
125 | IF sy-subrc = 0.
126 | DELETE rt_data INDEX lv_index.
127 | CONTINUE. " current loop
128 | ENDIF.
129 |
130 | -as4text = get_description( -trkorr ).
131 | ENDLOOP.
132 |
133 | ENDMETHOD.
134 |
135 |
136 | METHOD validate_open.
137 |
138 | DATA: ls_e070 TYPE e070.
139 |
140 |
141 | SELECT SINGLE * FROM e070
142 | INTO ls_e070
143 | WHERE trstatus = 'D'
144 | AND trfunction = 'K'
145 | AND strkorr = ''.
146 | IF sy-subrc <> 0.
147 | RAISE EXCEPTION TYPE zcx_aor_error
148 | EXPORTING
149 | textid = zcx_aor_error=>transport_released.
150 | ENDIF.
151 |
152 | ENDMETHOD.
153 | ENDCLASS.
154 |
--------------------------------------------------------------------------------
/src/zcl_aor_service.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_aor_service DEFINITION
2 | PUBLIC
3 | CREATE PUBLIC .
4 |
5 | PUBLIC SECTION.
6 |
7 | CLASS-METHODS delete_all
8 | RAISING
9 | zcx_aor_error .
10 | CLASS-METHODS list
11 | IMPORTING
12 | ir_status TYPE zif_aor_types=>ty_r_status OPTIONAL
13 | RETURNING
14 | VALUE(rt_data) TYPE zif_aor_types=>ty_review_tt .
15 | CLASS-METHODS open
16 | IMPORTING
17 | !iv_trkorr TYPE trkorr
18 | !iv_base TYPE zaor_review-base
19 | !iv_ci_filter TYPE zaor_review-ci_filter
20 | RAISING
21 | zcx_aor_error .
22 | PROTECTED SECTION.
23 | PRIVATE SECTION.
24 |
25 | CLASS-METHODS ci_run
26 | IMPORTING
27 | !iv_review_id TYPE zaor_review-review_id
28 | RAISING
29 | zcx_aor_error .
30 | CLASS-METHODS create
31 | IMPORTING
32 | !iv_review_id TYPE zaor_review-review_id
33 | !iv_base TYPE zaor_review-base
34 | !it_objects TYPE e071_t OPTIONAL
35 | !iv_responsible TYPE zaor_review-responsible
36 | !iv_ci_filter TYPE zaor_review-ci_filter
37 | !iv_trkorr TYPE trkorr .
38 | CLASS-METHODS open_developer
39 | IMPORTING
40 | !iv_trkorr TYPE trkorr
41 | !iv_ci_filter TYPE zaor_review-ci_filter
42 | RAISING
43 | zcx_aor_error .
44 | CLASS-METHODS open_object
45 | IMPORTING
46 | !iv_trkorr TYPE trkorr
47 | !iv_ci_filter TYPE zaor_review-ci_filter
48 | RAISING
49 | zcx_aor_error .
50 | CLASS-METHODS open_transport
51 | IMPORTING
52 | !iv_trkorr TYPE trkorr
53 | !iv_ci_filter TYPE zaor_review-ci_filter
54 | RAISING
55 | zcx_aor_error .
56 | ENDCLASS.
57 |
58 |
59 |
60 | CLASS ZCL_AOR_SERVICE IMPLEMENTATION.
61 |
62 |
63 | METHOD ci_run.
64 |
65 | DATA: lo_review TYPE REF TO zcl_aor_review.
66 |
67 |
68 | CREATE OBJECT lo_review
69 | EXPORTING
70 | iv_review_id = iv_review_id.
71 | lo_review->ci( )->run( ).
72 |
73 | ENDMETHOD.
74 |
75 |
76 | METHOD create.
77 |
78 | DATA: ls_review TYPE zaor_review,
79 | ls_obj TYPE zaor_review_obj.
80 |
81 | FIELD-SYMBOLS: LIKE LINE OF it_objects.
82 |
83 |
84 | ASSERT NOT iv_review_id IS INITIAL.
85 | ASSERT NOT iv_base IS INITIAL.
86 | ASSERT NOT iv_responsible IS INITIAL.
87 | ASSERT NOT iv_ci_filter IS INITIAL.
88 | ASSERT NOT iv_trkorr IS INITIAL.
89 |
90 | ls_review-review_id = iv_review_id.
91 | ls_review-status = zif_aor_constants=>c_status-open.
92 | ls_review-base = iv_base.
93 | ls_review-responsible = iv_responsible.
94 | ls_review-ci_filter = iv_ci_filter.
95 | ls_review-trkorr = iv_trkorr.
96 | INSERT zaor_review FROM ls_review. "#EC CI_SUBRC
97 | ASSERT sy-subrc = 0.
98 |
99 | LOOP AT it_objects ASSIGNING .
100 | CLEAR ls_obj.
101 | MOVE-CORRESPONDING TO ls_obj.
102 | ls_obj-review_id = iv_review_id.
103 | INSERT zaor_review_obj FROM ls_obj. "#EC CI_SUBRC
104 | ASSERT sy-subrc = 0.
105 | ENDLOOP.
106 |
107 | ENDMETHOD.
108 |
109 |
110 | METHOD delete_all.
111 |
112 | DATA: lt_reviews TYPE zif_aor_types=>ty_review_tt,
113 | lo_review TYPE REF TO zcl_aor_review.
114 |
115 | FIELD-SYMBOLS: LIKE LINE OF lt_reviews.
116 |
117 |
118 | lt_reviews = list( ).
119 |
120 | LOOP AT lt_reviews ASSIGNING .
121 | CREATE OBJECT lo_review
122 | EXPORTING
123 | iv_review_id = -review_id.
124 | lo_review->delete( ).
125 | ENDLOOP.
126 |
127 | ENDMETHOD.
128 |
129 |
130 | METHOD list.
131 |
132 | SELECT * FROM zaor_review
133 | INTO TABLE rt_data
134 | WHERE status IN ir_status
135 | ORDER BY review_id. "#EC CI_NOWHERE "#EC CI_SUBRC
136 |
137 | ENDMETHOD.
138 |
139 |
140 | METHOD open.
141 | * starts/creates a review. Todo: rename method?
142 |
143 | ASSERT NOT iv_trkorr IS INITIAL.
144 | ASSERT NOT iv_base IS INITIAL.
145 | ASSERT NOT iv_ci_filter IS INITIAL.
146 |
147 | zcl_aor_transport=>validate_open( iv_trkorr ).
148 |
149 | CASE iv_base.
150 | WHEN zif_aor_constants=>c_base-transport.
151 | open_transport( iv_trkorr = iv_trkorr
152 | iv_ci_filter = iv_ci_filter ).
153 | WHEN zif_aor_constants=>c_base-object.
154 | open_object( iv_trkorr = iv_trkorr
155 | iv_ci_filter = iv_ci_filter ).
156 | WHEN zif_aor_constants=>c_base-developer.
157 | open_developer( iv_trkorr = iv_trkorr
158 | iv_ci_filter = iv_ci_filter ).
159 | WHEN OTHERS.
160 | ASSERT 1 = 1 + 1.
161 | ENDCASE.
162 |
163 | ENDMETHOD.
164 |
165 |
166 | METHOD open_developer.
167 |
168 | BREAK-POINT.
169 |
170 | * todo, some way to resolve conflicts, multiple developers for same object
171 | * zif_aor_constants=>c_base-developer
172 |
173 | ENDMETHOD.
174 |
175 |
176 | METHOD open_object.
177 |
178 | DATA: lt_objects TYPE e071_t,
179 | lt_obj TYPE e071_t,
180 | lv_review_id TYPE zaor_review-review_id.
181 |
182 | FIELD-SYMBOLS: LIKE LINE OF lt_objects.
183 |
184 |
185 | lt_objects = zcl_aor_transport=>list_objects( iv_trkorr ).
186 |
187 | LOOP AT lt_objects ASSIGNING .
188 | CONCATENATE -trkorr '_' -as4pos INTO lv_review_id.
189 |
190 | CLEAR lt_obj.
191 | APPEND TO lt_obj.
192 |
193 | create( iv_review_id = lv_review_id
194 | iv_base = zif_aor_constants=>c_base-object
195 | it_objects = lt_obj
196 | iv_responsible = zcl_aor_transport=>get_developer( -trkorr )
197 | iv_ci_filter = iv_ci_filter
198 | iv_trkorr = iv_trkorr ).
199 |
200 | ci_run( lv_review_id ).
201 |
202 | ENDLOOP.
203 |
204 | ENDMETHOD.
205 |
206 |
207 | METHOD open_transport.
208 |
209 | create( iv_review_id = iv_trkorr
210 | iv_base = zif_aor_constants=>c_base-transport
211 | iv_responsible = zcl_aor_transport=>get_developer( iv_trkorr )
212 | iv_ci_filter = iv_ci_filter
213 | iv_trkorr = iv_trkorr ).
214 |
215 | ci_run( iv_trkorr ).
216 |
217 | ENDMETHOD.
218 | ENDCLASS.
219 |
--------------------------------------------------------------------------------
/src/zcl_aor_comments.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_aor_comments DEFINITION
2 | PUBLIC
3 | FINAL
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | METHODS constructor
9 | IMPORTING
10 | !io_review TYPE REF TO zcl_aor_review .
11 | METHODS add
12 | IMPORTING
13 | !iv_text TYPE string
14 | !iv_topic TYPE zaor_comment-topic OPTIONAL
15 | RETURNING
16 | VALUE(is_code_comment) TYPE sap_bool
17 | RAISING
18 | zcx_aor_error .
19 | METHODS close
20 | IMPORTING
21 | !iv_topic TYPE zaor_comment-topic
22 | RAISING
23 | zcx_aor_error .
24 | METHODS check_all_closed
25 | RAISING
26 | zcx_aor_error .
27 | METHODS list
28 | IMPORTING
29 | !iv_with_code_comments TYPE abap_bool OPTIONAL
30 | RETURNING
31 | VALUE(rt_data) TYPE zif_aor_types=>ty_comment_tt .
32 | METHODS delete
33 | IMPORTING
34 | !iv_topic TYPE zaor_comment-topic
35 | RAISING
36 | zcx_aor_error .
37 | CLASS-METHODS can_delete
38 | IMPORTING
39 | !is_comment TYPE zif_aor_types=>ty_comment
40 | RETURNING
41 | VALUE(can_delete) TYPE abap_bool .
42 | PROTECTED SECTION.
43 | PRIVATE SECTION.
44 |
45 | DATA mo_review TYPE REF TO zcl_aor_review .
46 |
47 | METHODS topic_id
48 | IMPORTING
49 | !iv_topic TYPE zaor_comment-topic
50 | RETURNING
51 | VALUE(rv_topic) TYPE zaor_comment-topic .
52 | ENDCLASS.
53 |
54 |
55 |
56 | CLASS ZCL_AOR_COMMENTS IMPLEMENTATION.
57 |
58 |
59 | METHOD add.
60 |
61 | DATA: ls_comment TYPE zaor_comment,
62 | ls_code_comment TYPE REF TO zaor_code_com.
63 |
64 | IF iv_text IS INITIAL.
65 | RETURN.
66 | ENDIF.
67 |
68 | mo_review->check_open( ).
69 |
70 | ls_comment-topic = topic_id( iv_topic ).
71 | ls_comment-review_id = mo_review->header( )-review_id.
72 | ls_comment-text = iv_text.
73 | ls_comment-bname = sy-uname.
74 | GET TIME STAMP FIELD ls_comment-timestamp.
75 |
76 | INSERT zaor_comment FROM ls_comment. "#EC CI_SUBRC
77 | ASSERT sy-subrc = 0.
78 |
79 | READ TABLE mo_review->mv_pos_new_code_comments REFERENCE INTO ls_code_comment
80 | WITH KEY topic = ls_comment-topic.
81 | IF sy-subrc = 0.
82 | INSERT zaor_code_com FROM ls_code_comment->*.
83 | ASSERT sy-subrc = 0.
84 | mo_review->on_code_comment_posted( ls_code_comment->* ).
85 | ENDIF.
86 |
87 | SELECT COUNT(*) FROM zaor_code_com WHERE
88 | review_id = ls_comment-review_id AND topic = ls_comment-topic.
89 | IF sy-subrc = 0.
90 | is_code_comment = abap_true.
91 | ENDIF.
92 |
93 | ENDMETHOD.
94 |
95 |
96 | METHOD can_delete.
97 |
98 | can_delete = abap_true.
99 |
100 | SELECT COUNT(*) FROM zaor_comment
101 | WHERE review_id = is_comment-review_id
102 | AND topic = is_comment-topic AND bname = sy-uname.
103 | IF sy-subrc <> 0.
104 | can_delete = abap_false.
105 | ENDIF.
106 |
107 | SELECT COUNT(*) FROM zaor_comment
108 | WHERE review_id = is_comment-review_id
109 | AND topic = is_comment-topic.
110 | IF sy-dbcnt > 1.
111 | " conversation exists
112 | can_delete = abap_false.
113 | ENDIF.
114 |
115 | ENDMETHOD.
116 |
117 |
118 | METHOD check_all_closed.
119 |
120 | DATA: lt_comments TYPE zif_aor_types=>ty_comment_tt.
121 |
122 | FIELD-SYMBOLS: LIKE LINE OF lt_comments.
123 |
124 |
125 | lt_comments = list( ).
126 | IF lt_comments IS INITIAL.
127 | RETURN.
128 | ENDIF.
129 |
130 | LOOP AT lt_comments ASSIGNING WHERE closed = abap_true.
131 | DELETE lt_comments WHERE topic = -topic.
132 | ENDLOOP.
133 |
134 | IF NOT lt_comments IS INITIAL.
135 | RAISE EXCEPTION TYPE zcx_aor_error
136 | EXPORTING
137 | textid = zcx_aor_error=>comments_pending.
138 | ENDIF.
139 |
140 | ENDMETHOD.
141 |
142 |
143 | METHOD close.
144 |
145 | DATA: ls_comment TYPE zaor_comment.
146 |
147 | mo_review->check_open( ).
148 |
149 | ls_comment-topic = topic_id( iv_topic ).
150 | ls_comment-review_id = mo_review->header( )-review_id.
151 | ls_comment-text = 'Ok, closed' ##NO_TEXT.
152 | ls_comment-bname = sy-uname.
153 | ls_comment-closed = abap_true.
154 | GET TIME STAMP FIELD ls_comment-timestamp.
155 |
156 | SELECT COUNT(*) FROM zaor_comment WHERE topic = ls_comment-topic
157 | AND review_id = ls_comment-review_id.
158 | IF sy-subrc <> 0.
159 | RAISE EXCEPTION TYPE zcx_aor_error
160 | EXPORTING
161 | textid = zcx_aor_error=>close_new_topic.
162 | ENDIF.
163 |
164 | INSERT zaor_comment FROM ls_comment. "#EC CI_SUBRC
165 | ASSERT sy-subrc = 0.
166 |
167 | ENDMETHOD.
168 |
169 |
170 | METHOD constructor.
171 |
172 | mo_review = io_review.
173 |
174 | ENDMETHOD.
175 |
176 |
177 | METHOD delete.
178 | DATA: lv_review_id TYPE zaor_review_id.
179 |
180 | lv_review_id = mo_review->header( )-review_id.
181 |
182 | DELETE FROM zaor_comment WHERE review_id = lv_review_id
183 | AND topic = iv_topic.
184 |
185 | ENDMETHOD.
186 |
187 |
188 | METHOD list.
189 |
190 | DATA: lv_review_id TYPE zaor_review-review_id.
191 | FIELD-SYMBOLS: LIKE LINE OF rt_data.
192 |
193 |
194 | lv_review_id = mo_review->header( )-review_id.
195 |
196 | ##TOO_MANY_ITAB_FIELDS
197 | SELECT c~review_id c~topic c~timestamp c~text c~bname c~closed
198 | p~pgmid p~object p~obj_name p~new_line p~old_line
199 | FROM zaor_comment AS c LEFT OUTER JOIN zaor_code_com AS p
200 | ON p~review_id = c~review_id AND p~topic = c~topic
201 | INTO CORRESPONDING FIELDS OF TABLE rt_data
202 | WHERE c~review_id = lv_review_id
203 | ORDER BY c~topic ASCENDING c~timestamp ASCENDING. "#EC CI_SUBRC
204 |
205 | IF iv_with_code_comments = abap_false.
206 | DELETE rt_data WHERE pgmid IS NOT INITIAL AND object IS NOT INITIAL
207 | AND obj_name IS NOT INITIAL.
208 | ENDIF.
209 |
210 | LOOP AT rt_data ASSIGNING .
211 | -time_formatted = zcl_aor_time=>format_timestamp( -timestamp ).
212 | ENDLOOP.
213 |
214 | ENDMETHOD.
215 |
216 |
217 | METHOD topic_id.
218 |
219 | IF iv_topic IS INITIAL.
220 | TRY.
221 | rv_topic = cl_system_uuid=>if_system_uuid_static~create_uuid_c22( ).
222 | CATCH cx_uuid_error.
223 | ASSERT 1 = 1 + 1.
224 | ENDTRY.
225 | ELSE.
226 | rv_topic = iv_topic.
227 | ENDIF.
228 |
229 | ENDMETHOD.
230 | ENDCLASS.
231 |
--------------------------------------------------------------------------------
/abaplint.json:
--------------------------------------------------------------------------------
1 | {
2 | "global": {
3 | "files": "/src/**/*.*",
4 | "skipGeneratedGatewayClasses": true,
5 | "skipGeneratedPersistentClasses": true,
6 | "skipGeneratedFunctionGroups": true
7 | },
8 | "dependencies": [
9 | {
10 | "url": "https://github.com/abaplint/deps",
11 | "folder": "/deps1",
12 | "files": "/src/**/*.*"
13 | },
14 | {
15 | "url": "https://github.com/germanysources/abapOpenReviewDeps",
16 | "folder": "/deps3",
17 | "files": "/src/**/*.*"
18 | }
19 | ],
20 | "syntax": {
21 | "version": "v702",
22 | "errorNamespace": "^(Z|Y|LT?CL_|TY_|LIF_)",
23 | "globalConstants": [],
24 | "globalMacros": []
25 | },
26 | "rules": {
27 | "downport": false,
28 | "line_break_multiple_parameters": false,
29 | "unknown_types": true,
30 | "forbidden_void_type": {
31 | "check": []
32 | },
33 | "forbidden_identifier": true,
34 | "try_without_catch": false,
35 | "unused_variables": false,
36 | "prefix_is_current_class": {
37 | "omitMeInstanceCalls": false
38 | },
39 | "allowed_object_naming": true,
40 | "check_comments": false,
41 | "fully_type_constants": true,
42 | "keep_single_parameter_on_one_line": false,
43 | "prefer_returning_to_exporting": true,
44 | "selection_screen_naming": true,
45 | "sicf_consistency": true,
46 | "sql_escape_host_variables": true,
47 | "xml_consistency": true,
48 | "check_no_handler_pragma": true,
49 | "newline_between_methods": false,
50 | "chain_mainly_declarations": true,
51 | "check_abstract": true,
52 | "check_text_elements": true,
53 | "type_begin_single_include": true,
54 | "types_naming": false,
55 | "7bit_ascii": true,
56 | "abapdoc": false,
57 | "check_ddic": true,
58 | "check_include": true,
59 | "form_no_dash": true,
60 | "allowed_object_types": false,
61 | "ambiguous_statement": false,
62 | "avoid_use": {
63 | "define": false,
64 | "endselect": true,
65 | "execSQL": true,
66 | "kernelCall": true,
67 | "communication": true,
68 | "systemCall": true,
69 | "defaultKey": false,
70 | "break": false,
71 | "statics": false
72 | },
73 | "begin_end_names": true,
74 | "check_transformation_exists": true,
75 | "check_syntax": true,
76 | "class_attribute_names": {
77 | "ignoreExceptions": true,
78 | "ignoreInterfaces": false,
79 | "statics": "^G._.*$",
80 | "ignoreLocal": false,
81 | "constants": "",
82 | "instance": "^M._.*$"
83 | },
84 | "cloud_types": true,
85 | "colon_missing_space": true,
86 | "commented_code": true,
87 | "constructor_visibility_public": true,
88 | "contains_tab": true,
89 | "definitions_top": true,
90 | "description_empty": true,
91 | "double_space": false,
92 | "empty_line_in_statement": {
93 | "allowChained": true
94 | },
95 | "empty_statement": true,
96 | "empty_structure": {
97 | "loop": true,
98 | "if": false,
99 | "while": true,
100 | "case": true,
101 | "select": true,
102 | "do": true,
103 | "at": true
104 | },
105 | "exit_or_check": true,
106 | "exporting": true,
107 | "form_tables_obsolete": false,
108 | "functional_writing": {
109 | "ignoreExceptions": true
110 | },
111 | "global_class": true,
112 | "identical_form_names": true,
113 | "if_in_if": true,
114 | "implement_methods": true,
115 | "in_statement_indentation": false,
116 | "indentation": {
117 | "ignoreExceptions": true,
118 | "alignTryCatch": false,
119 | "globalClassSkipFirst": false,
120 | "ignoreGlobalClassDefinition": false,
121 | "ignoreGlobalInterface": false
122 | },
123 | "inline_data_old_versions": true,
124 | "keyword_case": {
125 | "style": "upper",
126 | "ignoreExceptions": true,
127 | "ignoreLowerClassImplmentationStatement": true,
128 | "ignoreGlobalClassDefinition": false,
129 | "ignoreGlobalInterface": false,
130 | "ignoreKeywords": [],
131 | "ignoreFunctionModuleName": false
132 | },
133 | "line_length": {
134 | "length": 120
135 | },
136 | "line_only_punc": {
137 | "ignoreExceptions": true
138 | },
139 | "local_class_naming": {
140 | "exception": "^LCL_.*$",
141 | "local": "^LCL_.*$",
142 | "test": "^LTCL_.*$"
143 | },
144 | "local_testclass_location": true,
145 | "local_variable_names": {
146 | "expectedData": "^L._.*$",
147 | "expectedConstant": "^LC_.*$",
148 | "expectedFS": "^$"
149 | },
150 | "main_file_contents": true,
151 | "max_one_statement": true,
152 | "message_exists": false,
153 | "method_length": {
154 | "statements": 100,
155 | "ignoreTestClasses": false,
156 | "errorWhenEmpty": false
157 | },
158 | "method_parameter_names": false,
159 | "mix_returning": true,
160 | "msag_consistency": true,
161 | "nesting": {
162 | "depth": 5
163 | },
164 | "no_public_attributes": false,
165 | "object_naming": {
166 | "clas": "^ZC(L|X)\\_",
167 | "intf": "^ZIF\\_",
168 | "prog": "^Z",
169 | "fugr": "^Z",
170 | "tabl": "^Z",
171 | "ttyp": "^Z",
172 | "dtel": "^Z",
173 | "doma": "^Z",
174 | "msag": "^Z",
175 | "tran": "^Z",
176 | "enqu": "^EZ",
177 | "auth": "^Z",
178 | "pinf": "^Z",
179 | "idoc": "^Z",
180 | "ssfo": "^Z",
181 | "ssst": "^Z",
182 | "xslt": "^Z"
183 | },
184 | "obsolete_statement": {
185 | "refresh": true,
186 | "compute": true,
187 | "add": true,
188 | "subtract": true,
189 | "multiply": true,
190 | "move": true,
191 | "divide": true,
192 | "requested": true,
193 | "setExtended": true,
194 | "occurs": true
195 | },
196 | "parser_error": {},
197 | "preferred_compare_operator": {
198 | "badOperators": [
199 | "EQ",
200 | "><",
201 | "NE",
202 | "GE",
203 | "GT",
204 | "LT",
205 | "LE"
206 | ]
207 | },
208 | "release_idoc": true,
209 | "remove_descriptions": {
210 | "ignoreExceptions": false
211 | },
212 | "rfc_error_handling": false,
213 | "sequential_blank": {
214 | "lines": 4
215 | },
216 | "short_case": {
217 | "length": 1,
218 | "allow": [
219 | "iv_action",
220 | "sy"
221 | ]
222 | },
223 | "space_before_colon": true,
224 | "space_before_dot": {
225 | "ignoreGlobalDefinition": true,
226 | "ignoreExceptions": true
227 | },
228 | "start_at_tab": true,
229 | "superclass_final": true,
230 | "tabl_enhancement_category": true,
231 | "type_form_parameters": true,
232 | "unreachable_code": true,
233 | "use_new": true,
234 | "when_others_last": true,
235 | "whitespace_end": true
236 | }
237 | }
238 |
--------------------------------------------------------------------------------
/src/zaor_review.ssst.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAOR_REVIEW
7 | E
8 | E
9 |
Style ZAOR_REVIEW
10 | Style ZAOR_REVIEW
11 | A1
12 | 10.0
13 | 6.0
14 | 1.0
15 | CM
16 | A
17 | HELVE
18 | 120
19 |
20 |
21 |
22 | A
23 | ZAOR_REVIEW
24 | A0
25 | LEFT
26 | 1.0
27 | LN
28 | CM
29 | CM
30 | CM
31 | CM
32 | CM
33 | CM
34 | HELVE
35 | 100
36 | *
37 | *
38 | *
39 | E
40 |
Size 10 Left
41 |
42 |
43 | A
44 | ZAOR_REVIEW
45 | A1
46 | LEFT
47 | 1.0
48 | LN
49 | CM
50 | CM
51 | CM
52 | CM
53 | CM
54 | CM
55 | HELVE
56 | 120
57 | *
58 | *
59 | *
60 | E
61 |
Size 12 Left
62 |
63 |
64 | A
65 | ZAOR_REVIEW
66 | B0
67 | LEFT
68 | 1.0
69 | LN
70 | CM
71 | CM
72 | CM
73 | CM
74 | CM
75 | CM
76 | HELVE
77 | 100
78 | X
79 | *
80 | *
81 | E
82 |
Size 10 Left Bold
83 |
84 |
85 | A
86 | ZAOR_REVIEW
87 | B1
88 | LEFT
89 | 1.0
90 | LN
91 | CM
92 | CM
93 | CM
94 | CM
95 | CM
96 | CM
97 | HELVE
98 | 120
99 | X
100 | *
101 | *
102 | E
103 |
Size 12 Left Bold
104 |
105 |
106 | A
107 | ZAOR_REVIEW
108 | B4
109 | LEFT
110 | 1.0
111 | LN
112 | CM
113 | CM
114 | CM
115 | CM
116 | CM
117 | CM
118 | HELVE
119 | 160
120 | X
121 | *
122 | *
123 | E
124 |
Size 16 Left Bold
125 |
126 |
127 | A
128 | ZAOR_REVIEW
129 | B5
130 | LEFT
131 | 1.0
132 | LN
133 | CM
134 | CM
135 | CM
136 | CM
137 | CM
138 | CM
139 | HELVE
140 | 260
141 | X
142 | *
143 | *
144 | E
145 |
Size 26 Left Bold
146 |
147 |
148 | A
149 | ZAOR_REVIEW
150 | C0
151 | LEFT
152 | 1.0
153 | LN
154 | CM
155 | CM
156 | CM
157 | CM
158 | CM
159 | CM
160 | COURIER
161 | 100
162 | *
163 | *
164 | *
165 | E
166 |
Courier 10 Left
167 |
168 |
169 | A
170 | ZAOR_REVIEW
171 | C1
172 | LEFT
173 | 1.0
174 | LN
175 | CM
176 | CM
177 | CM
178 | CM
179 | CM
180 | CM
181 | COURIER
182 | 120
183 | *
184 | *
185 | *
186 | E
187 |
Courier 12 Left
188 |
189 |
190 | A
191 | ZAOR_REVIEW
192 | R0
193 | RIGHT
194 | 1.0
195 | LN
196 | CM
197 | CM
198 | CM
199 | CM
200 | CM
201 | CM
202 | HELVE
203 | 100
204 | *
205 | *
206 | *
207 | E
208 |
Size 10 Right
209 |
210 |
211 | A
212 | ZAOR_REVIEW
213 | U1
214 | LEFT
215 | 1.0
216 | LN
217 | CM
218 | CM
219 | CM
220 | CM
221 | CM
222 | CM
223 | HELVE
224 | 120
225 | *
226 | *
227 | X
228 | E
229 |
Size 12 Left Underline
230 |
231 |
232 |
233 |
234 |
235 |
--------------------------------------------------------------------------------
/src/zcl_aor_diff.clas.testclasses.abap:
--------------------------------------------------------------------------------
1 | CLASS ltcl_test DEFINITION DEFERRED.
2 | CLASS zcl_aor_diff DEFINITION LOCAL FRIENDS ltcl_test.
3 |
4 | *----------------------------------------------------------------------*
5 | * CLASS ltcl_test DEFINITION
6 | *----------------------------------------------------------------------*
7 | *
8 | *----------------------------------------------------------------------*
9 | CLASS ltcl_test DEFINITION FOR TESTING
10 | DURATION SHORT
11 | RISK LEVEL HARMLESS FINAL.
12 |
13 | PRIVATE SECTION.
14 | DATA: mt_old TYPE abaptxt255_tab,
15 | mt_new TYPE abaptxt255_tab,
16 | mt_diff TYPE zif_aor_types=>ty_diff_tt,
17 | mt_boundary_lines TYPE zif_aor_types=>ty_boundary_lines_tt.
18 |
19 | METHODS: setup.
20 | METHODS: run.
21 | METHODS: check IMPORTING it_diff TYPE zif_aor_types=>ty_diff_tt.
22 |
23 | METHODS: render_001 FOR TESTING,
24 | render_002 FOR TESTING,
25 | render_003 FOR TESTING,
26 | render_004 FOR TESTING,
27 | render_005 FOR TESTING,
28 | render_006 FOR TESTING,
29 | render_007 FOR TESTING,
30 | render_008 FOR TESTING,
31 | render_009 FOR TESTING,
32 | render_010 FOR TESTING.
33 |
34 | ENDCLASS. "ltcl_Test
35 |
36 | *----------------------------------------------------------------------*
37 | * CLASS ltcl_test IMPLEMENTATION
38 | *----------------------------------------------------------------------*
39 | *
40 | *----------------------------------------------------------------------*
41 | CLASS ltcl_test IMPLEMENTATION.
42 |
43 | DEFINE _new.
44 | append &1 to mt_new.
45 | END-OF-DEFINITION.
46 |
47 | DEFINE _old.
48 | append &1 to mt_old.
49 | END-OF-DEFINITION.
50 |
51 | METHOD setup.
52 | CLEAR mt_old.
53 | CLEAR mt_new.
54 | CLEAR mt_diff.
55 | CLEAR mt_boundary_lines.
56 | ENDMETHOD. "setup
57 |
58 | METHOD run.
59 |
60 | DATA: lt_delta TYPE vxabapt255_tab.
61 |
62 |
63 | lt_delta = zcl_aor_diff=>delta( it_old = mt_old
64 | it_new = mt_new
65 | it_boundary_lines = mt_boundary_lines ).
66 |
67 | mt_diff = zcl_aor_diff=>render( it_old = mt_old
68 | it_new = mt_new
69 | it_delta = lt_delta ).
70 |
71 | ENDMETHOD. "run
72 |
73 | METHOD check.
74 |
75 | run( ).
76 |
77 | cl_abap_unit_assert=>assert_equals( act = mt_diff
78 | exp = it_diff ).
79 |
80 | ENDMETHOD. "check
81 |
82 | METHOD render_001.
83 |
84 | DATA: lt_expected TYPE zif_aor_types=>ty_diff_tt.
85 |
86 | FIELD-SYMBOLS: LIKE LINE OF lt_expected.
87 |
88 | * insert
89 | _new 'write'.
90 |
91 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
92 | -new = 1.
93 | -code = 'write'.
94 | -updkz = 'I'.
95 |
96 | check( lt_expected ).
97 |
98 | ENDMETHOD. "render_001
99 |
100 | METHOD render_002.
101 |
102 | DATA: lt_expected TYPE zif_aor_types=>ty_diff_tt.
103 |
104 | FIELD-SYMBOLS: LIKE LINE OF lt_expected.
105 |
106 | * delete
107 | _old 'write'.
108 |
109 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
110 | -old = 1.
111 | -code = 'write'.
112 | -updkz = 'D'.
113 |
114 | check( lt_expected ).
115 |
116 | ENDMETHOD. "render_002
117 |
118 | METHOD render_003.
119 |
120 | DATA: lt_expected TYPE zif_aor_types=>ty_diff_tt.
121 |
122 | FIELD-SYMBOLS: LIKE LINE OF lt_expected.
123 |
124 | * update
125 | _old 'foo'.
126 | _new 'bar'.
127 |
128 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
129 | -new = 1.
130 | -code = 'bar'.
131 | -updkz = 'U'.
132 |
133 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
134 | -old = 1.
135 | -code = 'foo'.
136 | -updkz = 'U'.
137 |
138 | check( lt_expected ).
139 |
140 | ENDMETHOD. "render_003
141 |
142 | METHOD render_004.
143 |
144 | DATA: lt_expected TYPE zif_aor_types=>ty_diff_tt,
145 | ls_boundary TYPE zif_aor_types=>ty_boundary_line.
146 |
147 | FIELD-SYMBOLS: LIKE LINE OF lt_expected.
148 |
149 | * delete 2nd line
150 | _old 'foo'.
151 | _old 'bar'.
152 |
153 | _new 'foo'.
154 |
155 | ls_boundary-start = 2.
156 | ls_boundary-end = 2.
157 | APPEND ls_boundary TO mt_boundary_lines.
158 |
159 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
160 | -old = 2.
161 | -code = 'bar'.
162 | -updkz = 'D'.
163 |
164 | check( lt_expected ).
165 |
166 | ENDMETHOD. "render_004
167 |
168 | METHOD render_005.
169 |
170 | DATA: lt_expected TYPE zif_aor_types=>ty_diff_tt,
171 | ls_boundary TYPE zif_aor_types=>ty_boundary_line.
172 |
173 | FIELD-SYMBOLS: LIKE LINE OF lt_expected.
174 |
175 | * update 2nd line
176 | _old 'foo'.
177 | _old 'bar'.
178 |
179 | _new 'foo'.
180 | _new 'bar moo'.
181 |
182 | ls_boundary-start = 2.
183 | ls_boundary-end = 2.
184 | APPEND ls_boundary TO mt_boundary_lines.
185 |
186 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
187 | -new = 2.
188 | -code = 'bar moo'.
189 | -updkz = 'U'.
190 |
191 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
192 | -old = 2.
193 | -code = 'bar'.
194 | -updkz = 'U'.
195 |
196 | check( lt_expected ).
197 |
198 | ENDMETHOD. "render_005
199 |
200 | METHOD render_006.
201 |
202 | DATA: lt_expected TYPE zif_aor_types=>ty_diff_tt.
203 |
204 | FIELD-SYMBOLS: LIKE LINE OF lt_expected.
205 |
206 | * insert 2 lines
207 | _new 'foo'.
208 | _new 'bar'.
209 |
210 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
211 | -new = 1.
212 | -code = 'foo'.
213 | -updkz = 'I'.
214 |
215 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
216 | -new = 2.
217 | -code = 'bar'.
218 | -updkz = 'I'.
219 |
220 | check( lt_expected ).
221 |
222 | ENDMETHOD. "render_006
223 |
224 | METHOD render_007.
225 |
226 | DATA: lt_expected TYPE zif_aor_types=>ty_diff_tt.
227 |
228 | FIELD-SYMBOLS: LIKE LINE OF lt_expected.
229 |
230 | * insert between 2 lines
231 | _old 'foo'.
232 | _old 'bar'.
233 |
234 | _new 'foo'.
235 | _new 'moo'.
236 | _new 'bar'.
237 |
238 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
239 | -new = 2.
240 | -code = 'moo'.
241 | -updkz = 'I'.
242 |
243 | check( lt_expected ).
244 |
245 | ENDMETHOD. "render_007
246 |
247 | METHOD render_008.
248 |
249 | DATA: lt_expected TYPE zif_aor_types=>ty_diff_tt.
250 |
251 | FIELD-SYMBOLS: LIKE LINE OF lt_expected.
252 |
253 | * insert between 2 lines and update
254 | _old '1'.
255 | _old '2'.
256 | _old '3'.
257 | _old '4'.
258 |
259 | _new '1'.
260 | _new '2'.
261 | _new 'inserted'.
262 | _new '3'.
263 | _new '4 update'.
264 |
265 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
266 | -new = 3.
267 | -code = 'inserted'.
268 | -updkz = 'I'.
269 |
270 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
271 | -new = 5.
272 | -code = '4 update'.
273 | -updkz = 'U'.
274 |
275 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
276 | -old = 4.
277 | -code = '4'.
278 | -updkz = 'U'.
279 |
280 | check( lt_expected ).
281 |
282 | ENDMETHOD. "render_008
283 |
284 | METHOD render_009.
285 |
286 | DATA: lt_expected TYPE zif_aor_types=>ty_diff_tt.
287 |
288 | FIELD-SYMBOLS: LIKE LINE OF lt_expected.
289 |
290 | * delete and update
291 | _old '1'.
292 | _old '2'.
293 | _old '3'.
294 | _old '4'.
295 |
296 | _new '1'.
297 | _new '3'.
298 | _new '4 update'.
299 |
300 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
301 | -old = 2.
302 | -code = '2'.
303 | -updkz = 'D'.
304 |
305 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
306 | -new = 3.
307 | -code = '4 update'.
308 | -updkz = 'U'.
309 |
310 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
311 | -old = 4.
312 | -code = '4'.
313 | -updkz = 'U'.
314 |
315 | check( lt_expected ).
316 |
317 | ENDMETHOD. "render_009
318 |
319 | METHOD render_010.
320 |
321 | DATA: lt_expected TYPE zif_aor_types=>ty_diff_tt,
322 | ls_boundary TYPE zif_aor_types=>ty_boundary_line.
323 |
324 | FIELD-SYMBOLS: LIKE LINE OF lt_expected.
325 |
326 | _old '1'.
327 | _old '2'.
328 | _old '3'.
329 | _old 'method a'.
330 | _old 'endmethod'.
331 |
332 | _new '1'.
333 | _new '3'.
334 | _new 'method a'.
335 | _new 'endmethod'.
336 |
337 | ls_boundary-start = 1.
338 | ls_boundary-end = 3.
339 | APPEND ls_boundary TO mt_boundary_lines.
340 | ls_boundary-start = 4.
341 | ls_boundary-end = 5.
342 | APPEND ls_boundary TO mt_boundary_lines.
343 |
344 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
345 | -old = 1.
346 | -new = 1.
347 | -code = '1'.
348 |
349 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
350 | -old = 2.
351 | -code = '2'.
352 | -updkz = 'D'.
353 |
354 | APPEND INITIAL LINE TO lt_expected ASSIGNING .
355 | -old = 3.
356 | -new = 3.
357 | -code = '3'.
358 |
359 | check( lt_expected ).
360 |
361 | ENDMETHOD.
362 |
363 | ENDCLASS. "ltcl_test IMPLEMENTATION
364 |
--------------------------------------------------------------------------------
/src/zcl_aor_ci.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_aor_ci DEFINITION
2 | PUBLIC
3 | FINAL
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | METHODS constructor
9 | IMPORTING
10 | !io_review TYPE REF TO zcl_aor_review .
11 | METHODS delete .
12 | METHODS results
13 | IMPORTING
14 | !iv_filter TYPE zaor_review-ci_filter OPTIONAL
15 | RETURNING
16 | VALUE(rs_info) TYPE zif_aor_types=>ty_ci_st .
17 | METHODS run
18 | RAISING
19 | zcx_aor_error .
20 | PROTECTED SECTION.
21 | PRIVATE SECTION.
22 |
23 | DATA mo_review TYPE REF TO zcl_aor_review .
24 |
25 | METHODS object_to_include
26 | IMPORTING
27 | !is_object TYPE zaor_object
28 | RETURNING
29 | VALUE(rv_program) TYPE programm .
30 | METHODS objectset
31 | RETURNING
32 | VALUE(ro_objectset) TYPE REF TO cl_ci_objectset .
33 | METHODS filter
34 | IMPORTING
35 | !iv_filter TYPE zaor_review-ci_filter OPTIONAL
36 | CHANGING
37 | !cs_info TYPE zif_aor_types=>ty_ci_st .
38 | METHODS filter_lines
39 | CHANGING
40 | !cs_info TYPE zif_aor_types=>ty_ci_st .
41 | ENDCLASS.
42 |
43 |
44 |
45 | CLASS ZCL_AOR_CI IMPLEMENTATION.
46 |
47 |
48 | METHOD constructor.
49 |
50 | mo_review = io_review.
51 |
52 | ENDMETHOD.
53 |
54 |
55 | METHOD delete.
56 |
57 | DATA: lo_inspection TYPE REF TO cl_ci_inspection,
58 | lv_name TYPE sci_insp,
59 | lv_objsnam TYPE sci_objs,
60 | lo_objectset TYPE REF TO cl_ci_objectset.
61 |
62 |
63 | lv_name = mo_review->header( )-review_id.
64 | cl_ci_inspection=>get_ref(
65 | EXPORTING
66 | p_user = ''
67 | p_name = lv_name
68 | RECEIVING
69 | p_ref = lo_inspection
70 | EXCEPTIONS
71 | insp_not_exists = 1
72 | OTHERS = 2 ).
73 | IF sy-subrc = 0.
74 | lo_inspection->delete( p_mode = 'A' ).
75 | ENDIF.
76 |
77 | lv_objsnam = mo_review->header( )-review_id.
78 | cl_ci_objectset=>get_ref(
79 | EXPORTING
80 | p_objsnam = lv_objsnam
81 | RECEIVING
82 | p_ref = lo_objectset
83 | EXCEPTIONS
84 | missing_parameter = 1
85 | objs_not_exists = 2
86 | invalid_request = 3
87 | object_not_exists = 4
88 | object_may_not_be_checked = 5
89 | no_main_program = 6
90 | OTHERS = 7 ).
91 | IF sy-subrc = 0.
92 | lo_objectset->delete( p_mode = 'A' ).
93 | ENDIF.
94 |
95 | ENDMETHOD.
96 |
97 |
98 | METHOD filter.
99 |
100 | CASE iv_filter.
101 | WHEN zif_aor_constants=>c_ci_filter-none.
102 | RETURN.
103 | WHEN zif_aor_constants=>c_ci_filter-object.
104 | BREAK-POINT.
105 | WHEN zif_aor_constants=>c_ci_filter-include.
106 | BREAK-POINT.
107 | WHEN zif_aor_constants=>c_ci_filter-lines.
108 | filter_lines( CHANGING cs_info = cs_info ).
109 | WHEN OTHERS.
110 | ASSERT 1 = 1 + 1.
111 | ENDCASE.
112 |
113 | ENDMETHOD.
114 |
115 |
116 | METHOD filter_lines.
117 |
118 | DATA: lv_include TYPE programm,
119 | lt_diff TYPE zif_aor_types=>ty_diff_list_tt,
120 | lt_results LIKE cs_info-results.
121 |
122 | FIELD-SYMBOLS: LIKE LINE OF lt_diff,
123 | LIKE LINE OF lt_results,
124 | LIKE LINE OF -diff.
125 |
126 |
127 | lt_diff = mo_review->diff( ).
128 |
129 | lt_results = cs_info-results.
130 | CLEAR cs_info-results.
131 |
132 | LOOP AT lt_diff ASSIGNING .
133 | lv_include = object_to_include( -object ).
134 | IF lv_include IS INITIAL.
135 | CONTINUE.
136 | ENDIF.
137 | LOOP AT -diff ASSIGNING
138 | WHERE NOT new IS INITIAL.
139 | LOOP AT lt_results ASSIGNING
140 | WHERE sobjname = lv_include AND line = -new.
141 | APPEND TO cs_info-results.
142 | ENDLOOP.
143 | ENDLOOP.
144 | ENDLOOP.
145 |
146 | ENDMETHOD.
147 |
148 |
149 | METHOD objectset.
150 |
151 | DATA: lt_objects TYPE scit_objs,
152 | ls_e071 TYPE e071,
153 | lv_objsnam TYPE sci_objs,
154 | lv_name TYPE sci_objs,
155 | lt_list TYPE e071_t,
156 | ls_tadir TYPE tadir.
157 |
158 | FIELD-SYMBOLS: LIKE LINE OF lt_objects,
159 | LIKE LINE OF lt_list.
160 |
161 |
162 | CASE mo_review->header( )-base.
163 | WHEN zif_aor_constants=>c_base-transport.
164 | cl_ci_objectset=>get_ref(
165 | EXPORTING
166 | p_type = cl_ci_objectset=>c_0kor
167 | p_korr = mo_review->header( )-review_id
168 | * p_korr_skip_svim = abap_true " parameter does not exist in 730
169 | RECEIVING
170 | p_ref = ro_objectset
171 | EXCEPTIONS
172 | missing_parameter = 1
173 | objs_not_exists = 2
174 | invalid_request = 3
175 | object_not_exists = 4
176 | object_may_not_be_checked = 5
177 | no_main_program = 6
178 | OTHERS = 7 ). "#EC CI_SUBRC
179 | ASSERT sy-subrc = 0.
180 | WHEN zif_aor_constants=>c_base-developer
181 | OR zif_aor_constants=>c_base-object.
182 | lv_objsnam = mo_review->header( )-review_id.
183 | cl_ci_objectset=>get_ref(
184 | EXPORTING
185 | p_type = cl_ci_objectset=>c_0obj
186 | p_objsnam = lv_objsnam
187 | RECEIVING
188 | p_ref = ro_objectset
189 | EXCEPTIONS
190 | missing_parameter = 1
191 | objs_not_exists = 2
192 | invalid_request = 3
193 | object_not_exists = 4
194 | object_may_not_be_checked = 5
195 | no_main_program = 6
196 | OTHERS = 7 ).
197 | IF sy-subrc = 0.
198 | RETURN.
199 | ENDIF.
200 | ASSERT sy-subrc = 2.
201 |
202 | * see method cl_wb_object_type=>get_tadir_from_limu
203 | * see class CL_CI_OBJECTSET method MAP_LIMU_TO_R3TR
204 | lt_list = mo_review->objects_list( ).
205 | LOOP AT lt_list ASSIGNING .
206 | IF -pgmid = 'R3TR'
207 | AND ( -object = 'TABU'
208 | OR -object = 'SBXL'
209 | OR -object = 'SBXP' ).
210 | CONTINUE.
211 | ENDIF.
212 |
213 | APPEND INITIAL LINE TO lt_objects ASSIGNING .
214 |
215 | IF -pgmid = 'LIMU'.
216 | MOVE-CORRESPONDING TO ls_e071.
217 | CALL FUNCTION 'TR_CHECK_TYPE'
218 | EXPORTING
219 | wi_e071 = ls_e071
220 | IMPORTING
221 | we_tadir = ls_tadir.
222 |
223 | -object = ls_tadir-object.
224 | -obj_name = ls_tadir-obj_name.
225 | ENDIF.
226 |
227 | -objtype = -object.
228 | -objname = -obj_name.
229 | ENDLOOP.
230 |
231 | IF lt_objects IS INITIAL.
232 | RETURN.
233 | ENDIF.
234 |
235 | lv_name = mo_review->header( )-review_id.
236 | cl_ci_objectset=>save_from_list(
237 | EXPORTING
238 | p_user = ''
239 | p_objects = lt_objects
240 | p_name = lv_name
241 | p_skip_svim = abap_true
242 | RECEIVING
243 | p_ref = ro_objectset
244 | EXCEPTIONS
245 | objs_already_exists = 1
246 | locked = 2
247 | error_in_enqueue = 3
248 | not_authorized = 4
249 | OTHERS = 5 ). "#EC CI_SUBRC
250 | ASSERT sy-subrc = 0.
251 |
252 | ENDCASE.
253 |
254 | ENDMETHOD.
255 |
256 |
257 | METHOD object_to_include.
258 |
259 | DATA: lv_funcname TYPE rs38l-name,
260 | ls_mtdkey TYPE seocpdkey.
261 |
262 |
263 | CASE is_object-object.
264 | WHEN 'METH'.
265 | ls_mtdkey = is_object-obj_name.
266 | cl_oo_classname_service=>get_method_include(
267 | EXPORTING
268 | mtdkey = ls_mtdkey
269 | RECEIVING
270 | result = rv_program
271 | EXCEPTIONS
272 | class_not_existing = 1
273 | method_not_existing = 2
274 | OTHERS = 3 ).
275 | IF sy-subrc <> 0.
276 | BREAK-POINT.
277 | ENDIF.
278 | WHEN 'PROG' OR 'REPS'.
279 | rv_program = is_object-obj_name.
280 | WHEN 'FUNC'.
281 | lv_funcname = is_object-obj_name.
282 | CALL FUNCTION 'FUNCTION_INCLUDE_INFO'
283 | CHANGING
284 | funcname = lv_funcname
285 | include = rv_program
286 | EXCEPTIONS
287 | function_not_exists = 1
288 | include_not_exists = 2
289 | group_not_exists = 3
290 | no_selections = 4
291 | no_function_include = 5
292 | OTHERS = 6. "#EC CI_SUBRC
293 | ASSERT sy-subrc = 0.
294 | WHEN 'CINS' OR 'NOTE' OR 'TABU'.
295 | RETURN.
296 | WHEN OTHERS.
297 | BREAK-POINT.
298 | ENDCASE.
299 |
300 | ENDMETHOD.
301 |
302 |
303 | METHOD results.
304 |
305 | DATA: lv_name TYPE sci_insp,
306 | lv_filter TYPE zaor_review-ci_filter,
307 | lo_ci TYPE REF TO cl_ci_inspection,
308 | lo_checkv TYPE REF TO cl_ci_checkvariant.
309 |
310 |
311 | lv_name = mo_review->header( )-review_id.
312 |
313 | IF NOT iv_filter IS INITIAL.
314 | lv_filter = iv_filter.
315 | ELSE.
316 | lv_filter = mo_review->header( )-ci_filter.
317 | ENDIF.
318 |
319 | cl_ci_inspection=>get_ref(
320 | EXPORTING
321 | p_user = ''
322 | p_name = lv_name
323 | RECEIVING
324 | p_ref = lo_ci
325 | EXCEPTIONS
326 | insp_not_exists = 1
327 | OTHERS = 2 ).
328 | IF sy-subrc = 1.
329 | RETURN.
330 | ENDIF.
331 | ASSERT sy-subrc = 0.
332 |
333 | cl_ci_checkvariant=>get_ref(
334 | EXPORTING
335 | p_user = ''
336 | p_id = lo_ci->inspecinf-checkvid
337 | RECEIVING
338 | p_ref = lo_checkv
339 | EXCEPTIONS
340 | chkv_not_exists = 1
341 | missing_parameter = 2
342 | OTHERS = 3 ). "#EC CI_SUBRC.
343 | ASSERT sy-subrc = 0.
344 |
345 | rs_info-chkvinf = lo_checkv->chkvinf.
346 |
347 | * make sure SAP note 2043027 is installed
348 | lo_ci->plain_list(
349 | IMPORTING
350 | p_list = rs_info-results ).
351 |
352 | rs_info-header = lo_ci->inspecinf.
353 |
354 | DELETE rs_info-results WHERE objtype = 'STAT'.
355 |
356 | filter( EXPORTING iv_filter = lv_filter
357 | CHANGING cs_info = rs_info ).
358 |
359 | ENDMETHOD.
360 |
361 |
362 | METHOD run.
363 |
364 | DATA: lv_date TYPE sci_deldat,
365 | lv_name TYPE sci_insp,
366 | lv_text TYPE sci_text,
367 | lv_variant TYPE sci_chkv,
368 | lo_ci TYPE REF TO cl_ci_inspection,
369 | lo_objects TYPE REF TO cl_ci_objectset,
370 | lo_variant TYPE REF TO cl_ci_checkvariant.
371 |
372 |
373 | mo_review->check_open( ).
374 |
375 | * fetch variant from ATC
376 | cl_satc_ac_config_access=>load_value(
377 | EXPORTING
378 | i_key = 'CI.CHECK.VARIANT'
379 | IMPORTING
380 | e_value = lv_variant ).
381 | IF lv_variant IS INITIAL.
382 | cl_ci_checkvariant=>get_chkv_alter(
383 | EXPORTING
384 | p_checkvname_default = 'DEFAULT'
385 | IMPORTING
386 | p_checkvname_new = lv_variant ).
387 | ENDIF.
388 |
389 | cl_ci_checkvariant=>get_ref(
390 | EXPORTING
391 | p_user = ''
392 | p_name = lv_variant
393 | RECEIVING
394 | p_ref = lo_variant
395 | EXCEPTIONS
396 | chkv_not_exists = 1
397 | missing_parameter = 2
398 | OTHERS = 3 ). "#EC CI_SUBRC
399 | ASSERT sy-subrc = 0.
400 |
401 | lo_objects = objectset( ).
402 | IF NOT lo_objects IS BOUND OR lo_objects->objectsinf-objcnt = 0.
403 | * no objects valid for code inspection
404 | RETURN.
405 | ENDIF.
406 |
407 | lv_name = mo_review->header( )-review_id.
408 | cl_ci_inspection=>create(
409 | EXPORTING
410 | p_user = ''
411 | p_name = lv_name
412 | RECEIVING
413 | p_ref = lo_ci
414 | EXCEPTIONS
415 | locked = 1
416 | error_in_enqueue = 2
417 | not_authorized = 3
418 | OTHERS = 4 ). "#EC CI_SUBRC
419 | ASSERT sy-subrc = 0.
420 |
421 | lv_date = sy-datum + 100.
422 | CONCATENATE 'Review' lv_name
423 | INTO lv_text SEPARATED BY space ##no_text.
424 |
425 | lo_ci->set( p_chkv = lo_variant
426 | p_objs = lo_objects
427 | p_text = lv_text
428 | p_deldate = lv_date ).
429 |
430 | lo_ci->save( EXCEPTIONS
431 | missing_information = 1
432 | insp_no_name = 2
433 | not_enqueued = 3
434 | OTHERS = 4 ). "#EC CI_SUBRC
435 | ASSERT sy-subrc = 0.
436 |
437 | lo_ci->run( EXPORTING
438 | p_howtorun = 'L' " parallel local server
439 | EXCEPTIONS
440 | invalid_check_version = 1
441 | OTHERS = 2 ). "#EC CI_SUBRC
442 | ASSERT sy-subrc = 0.
443 |
444 | ENDMETHOD.
445 | ENDCLASS.
446 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 2, June 1991
3 |
4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6 | Everyone is permitted to copy and distribute verbatim copies
7 | of this license document, but changing it is not allowed.
8 |
9 | Preamble
10 |
11 | The licenses for most software are designed to take away your
12 | freedom to share and change it. By contrast, the GNU General Public
13 | License is intended to guarantee your freedom to share and change free
14 | software--to make sure the software is free for all its users. This
15 | General Public License applies to most of the Free Software
16 | Foundation's software and to any other program whose authors commit to
17 | using it. (Some other Free Software Foundation software is covered by
18 | the GNU Lesser General Public License instead.) You can apply it to
19 | your programs, too.
20 |
21 | When we speak of free software, we are referring to freedom, not
22 | price. Our General Public Licenses are designed to make sure that you
23 | have the freedom to distribute copies of free software (and charge for
24 | this service if you wish), that you receive source code or can get it
25 | if you want it, that you can change the software or use pieces of it
26 | in new free programs; and that you know you can do these things.
27 |
28 | To protect your rights, we need to make restrictions that forbid
29 | anyone to deny you these rights or to ask you to surrender the rights.
30 | These restrictions translate to certain responsibilities for you if you
31 | distribute copies of the software, or if you modify it.
32 |
33 | For example, if you distribute copies of such a program, whether
34 | gratis or for a fee, you must give the recipients all the rights that
35 | you have. You must make sure that they, too, receive or can get the
36 | source code. And you must show them these terms so they know their
37 | rights.
38 |
39 | We protect your rights with two steps: (1) copyright the software, and
40 | (2) offer you this license which gives you legal permission to copy,
41 | distribute and/or modify the software.
42 |
43 | Also, for each author's protection and ours, we want to make certain
44 | that everyone understands that there is no warranty for this free
45 | software. If the software is modified by someone else and passed on, we
46 | want its recipients to know that what they have is not the original, so
47 | that any problems introduced by others will not reflect on the original
48 | authors' reputations.
49 |
50 | Finally, any free program is threatened constantly by software
51 | patents. We wish to avoid the danger that redistributors of a free
52 | program will individually obtain patent licenses, in effect making the
53 | program proprietary. To prevent this, we have made it clear that any
54 | patent must be licensed for everyone's free use or not licensed at all.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | GNU GENERAL PUBLIC LICENSE
60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61 |
62 | 0. This License applies to any program or other work which contains
63 | a notice placed by the copyright holder saying it may be distributed
64 | under the terms of this General Public License. The "Program", below,
65 | refers to any such program or work, and a "work based on the Program"
66 | means either the Program or any derivative work under copyright law:
67 | that is to say, a work containing the Program or a portion of it,
68 | either verbatim or with modifications and/or translated into another
69 | language. (Hereinafter, translation is included without limitation in
70 | the term "modification".) Each licensee is addressed as "you".
71 |
72 | Activities other than copying, distribution and modification are not
73 | covered by this License; they are outside its scope. The act of
74 | running the Program is not restricted, and the output from the Program
75 | is covered only if its contents constitute a work based on the
76 | Program (independent of having been made by running the Program).
77 | Whether that is true depends on what the Program does.
78 |
79 | 1. You may copy and distribute verbatim copies of the Program's
80 | source code as you receive it, in any medium, provided that you
81 | conspicuously and appropriately publish on each copy an appropriate
82 | copyright notice and disclaimer of warranty; keep intact all the
83 | notices that refer to this License and to the absence of any warranty;
84 | and give any other recipients of the Program a copy of this License
85 | along with the Program.
86 |
87 | You may charge a fee for the physical act of transferring a copy, and
88 | you may at your option offer warranty protection in exchange for a fee.
89 |
90 | 2. You may modify your copy or copies of the Program or any portion
91 | of it, thus forming a work based on the Program, and copy and
92 | distribute such modifications or work under the terms of Section 1
93 | above, provided that you also meet all of these conditions:
94 |
95 | a) You must cause the modified files to carry prominent notices
96 | stating that you changed the files and the date of any change.
97 |
98 | b) You must cause any work that you distribute or publish, that in
99 | whole or in part contains or is derived from the Program or any
100 | part thereof, to be licensed as a whole at no charge to all third
101 | parties under the terms of this License.
102 |
103 | c) If the modified program normally reads commands interactively
104 | when run, you must cause it, when started running for such
105 | interactive use in the most ordinary way, to print or display an
106 | announcement including an appropriate copyright notice and a
107 | notice that there is no warranty (or else, saying that you provide
108 | a warranty) and that users may redistribute the program under
109 | these conditions, and telling the user how to view a copy of this
110 | License. (Exception: if the Program itself is interactive but
111 | does not normally print such an announcement, your work based on
112 | the Program is not required to print an announcement.)
113 |
114 | These requirements apply to the modified work as a whole. If
115 | identifiable sections of that work are not derived from the Program,
116 | and can be reasonably considered independent and separate works in
117 | themselves, then this License, and its terms, do not apply to those
118 | sections when you distribute them as separate works. But when you
119 | distribute the same sections as part of a whole which is a work based
120 | on the Program, the distribution of the whole must be on the terms of
121 | this License, whose permissions for other licensees extend to the
122 | entire whole, and thus to each and every part regardless of who wrote it.
123 |
124 | Thus, it is not the intent of this section to claim rights or contest
125 | your rights to work written entirely by you; rather, the intent is to
126 | exercise the right to control the distribution of derivative or
127 | collective works based on the Program.
128 |
129 | In addition, mere aggregation of another work not based on the Program
130 | with the Program (or with a work based on the Program) on a volume of
131 | a storage or distribution medium does not bring the other work under
132 | the scope of this License.
133 |
134 | 3. You may copy and distribute the Program (or a work based on it,
135 | under Section 2) in object code or executable form under the terms of
136 | Sections 1 and 2 above provided that you also do one of the following:
137 |
138 | a) Accompany it with the complete corresponding machine-readable
139 | source code, which must be distributed under the terms of Sections
140 | 1 and 2 above on a medium customarily used for software interchange; or,
141 |
142 | b) Accompany it with a written offer, valid for at least three
143 | years, to give any third party, for a charge no more than your
144 | cost of physically performing source distribution, a complete
145 | machine-readable copy of the corresponding source code, to be
146 | distributed under the terms of Sections 1 and 2 above on a medium
147 | customarily used for software interchange; or,
148 |
149 | c) Accompany it with the information you received as to the offer
150 | to distribute corresponding source code. (This alternative is
151 | allowed only for noncommercial distribution and only if you
152 | received the program in object code or executable form with such
153 | an offer, in accord with Subsection b above.)
154 |
155 | The source code for a work means the preferred form of the work for
156 | making modifications to it. For an executable work, complete source
157 | code means all the source code for all modules it contains, plus any
158 | associated interface definition files, plus the scripts used to
159 | control compilation and installation of the executable. However, as a
160 | special exception, the source code distributed need not include
161 | anything that is normally distributed (in either source or binary
162 | form) with the major components (compiler, kernel, and so on) of the
163 | operating system on which the executable runs, unless that component
164 | itself accompanies the executable.
165 |
166 | If distribution of executable or object code is made by offering
167 | access to copy from a designated place, then offering equivalent
168 | access to copy the source code from the same place counts as
169 | distribution of the source code, even though third parties are not
170 | compelled to copy the source along with the object code.
171 |
172 | 4. You may not copy, modify, sublicense, or distribute the Program
173 | except as expressly provided under this License. Any attempt
174 | otherwise to copy, modify, sublicense or distribute the Program is
175 | void, and will automatically terminate your rights under this License.
176 | However, parties who have received copies, or rights, from you under
177 | this License will not have their licenses terminated so long as such
178 | parties remain in full compliance.
179 |
180 | 5. You are not required to accept this License, since you have not
181 | signed it. However, nothing else grants you permission to modify or
182 | distribute the Program or its derivative works. These actions are
183 | prohibited by law if you do not accept this License. Therefore, by
184 | modifying or distributing the Program (or any work based on the
185 | Program), you indicate your acceptance of this License to do so, and
186 | all its terms and conditions for copying, distributing or modifying
187 | the Program or works based on it.
188 |
189 | 6. Each time you redistribute the Program (or any work based on the
190 | Program), the recipient automatically receives a license from the
191 | original licensor to copy, distribute or modify the Program subject to
192 | these terms and conditions. You may not impose any further
193 | restrictions on the recipients' exercise of the rights granted herein.
194 | You are not responsible for enforcing compliance by third parties to
195 | this License.
196 |
197 | 7. If, as a consequence of a court judgment or allegation of patent
198 | infringement or for any other reason (not limited to patent issues),
199 | conditions are imposed on you (whether by court order, agreement or
200 | otherwise) that contradict the conditions of this License, they do not
201 | excuse you from the conditions of this License. If you cannot
202 | distribute so as to satisfy simultaneously your obligations under this
203 | License and any other pertinent obligations, then as a consequence you
204 | may not distribute the Program at all. For example, if a patent
205 | license would not permit royalty-free redistribution of the Program by
206 | all those who receive copies directly or indirectly through you, then
207 | the only way you could satisfy both it and this License would be to
208 | refrain entirely from distribution of the Program.
209 |
210 | If any portion of this section is held invalid or unenforceable under
211 | any particular circumstance, the balance of the section is intended to
212 | apply and the section as a whole is intended to apply in other
213 | circumstances.
214 |
215 | It is not the purpose of this section to induce you to infringe any
216 | patents or other property right claims or to contest validity of any
217 | such claims; this section has the sole purpose of protecting the
218 | integrity of the free software distribution system, which is
219 | implemented by public license practices. Many people have made
220 | generous contributions to the wide range of software distributed
221 | through that system in reliance on consistent application of that
222 | system; it is up to the author/donor to decide if he or she is willing
223 | to distribute software through any other system and a licensee cannot
224 | impose that choice.
225 |
226 | This section is intended to make thoroughly clear what is believed to
227 | be a consequence of the rest of this License.
228 |
229 | 8. If the distribution and/or use of the Program is restricted in
230 | certain countries either by patents or by copyrighted interfaces, the
231 | original copyright holder who places the Program under this License
232 | may add an explicit geographical distribution limitation excluding
233 | those countries, so that distribution is permitted only in or among
234 | countries not thus excluded. In such case, this License incorporates
235 | the limitation as if written in the body of this License.
236 |
237 | 9. The Free Software Foundation may publish revised and/or new versions
238 | of the General Public License from time to time. Such new versions will
239 | be similar in spirit to the present version, but may differ in detail to
240 | address new problems or concerns.
241 |
242 | Each version is given a distinguishing version number. If the Program
243 | specifies a version number of this License which applies to it and "any
244 | later version", you have the option of following the terms and conditions
245 | either of that version or of any later version published by the Free
246 | Software Foundation. If the Program does not specify a version number of
247 | this License, you may choose any version ever published by the Free Software
248 | Foundation.
249 |
250 | 10. If you wish to incorporate parts of the Program into other free
251 | programs whose distribution conditions are different, write to the author
252 | to ask for permission. For software which is copyrighted by the Free
253 | Software Foundation, write to the Free Software Foundation; we sometimes
254 | make exceptions for this. Our decision will be guided by the two goals
255 | of preserving the free status of all derivatives of our free software and
256 | of promoting the sharing and reuse of software generally.
257 |
258 | NO WARRANTY
259 |
260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268 | REPAIR OR CORRECTION.
269 |
270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278 | POSSIBILITY OF SUCH DAMAGES.
279 |
280 | END OF TERMS AND CONDITIONS
281 |
--------------------------------------------------------------------------------
/src/zcl_aor_review.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_aor_review DEFINITION
2 | PUBLIC
3 | FINAL
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | DATA mv_pos_new_code_comments TYPE zif_aor_types=>ty_code_comment_tt READ-ONLY .
9 |
10 | METHODS ci
11 | RETURNING
12 | VALUE(ro_ci) TYPE REF TO zcl_aor_ci .
13 | METHODS comments
14 | RETURNING
15 | VALUE(ro_comments) TYPE REF TO zcl_aor_comments .
16 | METHODS pdf
17 | RETURNING
18 | VALUE(rv_file) TYPE string .
19 | METHODS delete .
20 | METHODS check_open
21 | RAISING
22 | zcx_aor_error .
23 | METHODS objects_list
24 | RETURNING
25 | VALUE(rt_data) TYPE e071_t .
26 | METHODS constructor
27 | IMPORTING
28 | !iv_review_id TYPE zaor_review-review_id
29 | RAISING
30 | zcx_aor_error .
31 | METHODS header
32 | RETURNING
33 | VALUE(rs_header) TYPE zif_aor_types=>ty_header .
34 | METHODS diff
35 | RETURNING
36 | VALUE(rt_diff) TYPE zif_aor_types=>ty_diff_list_tt .
37 | METHODS pre_add_code_comment
38 | IMPORTING
39 | VALUE(iv_position) TYPE zaor_code_com .
40 | METHODS on_code_comment_posted
41 | IMPORTING
42 | VALUE(comment) TYPE zaor_code_com .
43 | METHODS get_approvals
44 | RETURNING
45 | VALUE(rt_approvals) TYPE zif_aor_types=>ty_approvals_tt .
46 | METHODS approve
47 | RAISING
48 | zcx_aor_error .
49 | METHODS can_approve
50 | RETURNING
51 | VALUE(rv_result) TYPE sap_bool .
52 | METHODS close
53 | RAISING
54 | zcx_aor_error .
55 | METHODS remove_approval.
56 | METHODS get_status
57 | RETURNING VALUE(rv_status) TYPE zaor_status.
58 | PROTECTED SECTION.
59 | PRIVATE SECTION.
60 |
61 | DATA mv_review_id TYPE zaor_review-review_id .
62 | CLASS-DATA gv_folder TYPE string .
63 |
64 | METHODS fix_newlines
65 | IMPORTING
66 | !it_comments TYPE zif_aor_types=>ty_comment_tt
67 | RETURNING
68 | VALUE(rt_comments) TYPE zif_aor_types=>ty_comment_tt .
69 | METHODS get_description
70 | RETURNING
71 | VALUE(rv_text) TYPE as4text .
72 | METHODS objects_list_limu
73 | RETURNING
74 | VALUE(rt_objects) TYPE zaor_object_tt .
75 | ENDCLASS.
76 |
77 |
78 |
79 | CLASS zcl_aor_review IMPLEMENTATION.
80 |
81 |
82 | METHOD approve.
83 | DATA: ls_approval TYPE zaor_approvals.
84 |
85 | comments( )->check_all_closed( ).
86 |
87 | ls_approval-review_id = mv_review_id.
88 | ls_approval-approved_by = sy-uname.
89 | GET TIME STAMP FIELD ls_approval-timestamp.
90 |
91 | INSERT zaor_approvals FROM ls_approval.
92 | IF sy-subrc <> 0.
93 | RAISE EXCEPTION TYPE zcx_aor_error
94 | EXPORTING
95 | textid = zcx_aor_error=>already_approved.
96 | ENDIF.
97 |
98 | UPDATE zaor_review SET status = zif_aor_constants=>c_status-approved
99 | WHERE review_id = mv_review_id.
100 | ASSERT sy-subrc = 0.
101 |
102 | ENDMETHOD.
103 |
104 |
105 | METHOD can_approve.
106 |
107 | SELECT COUNT(*) FROM zaor_approvals
108 | WHERE review_id = mv_review_id AND approved_by = sy-uname.
109 | IF sy-subrc = 0.
110 | RETURN.
111 | ENDIF.
112 |
113 | rv_result = abap_true.
114 |
115 | ENDMETHOD.
116 |
117 |
118 | METHOD check_open.
119 |
120 | IF get_status( ) = zif_aor_constants=>c_status-closed.
121 | RAISE EXCEPTION TYPE zcx_aor_error
122 | EXPORTING
123 | textid = zcx_aor_error=>review_closed.
124 | ENDIF.
125 |
126 | ENDMETHOD.
127 |
128 |
129 | METHOD ci.
130 |
131 | CREATE OBJECT ro_ci
132 | EXPORTING
133 | io_review = me.
134 |
135 | ENDMETHOD.
136 |
137 |
138 | METHOD close.
139 |
140 | SELECT COUNT(*) FROM zaor_config
141 | WHERE approve_before_transport_req = abap_true.
142 | IF sy-subrc = 0.
143 | SELECT COUNT(*) FROM zaor_review
144 | WHERE review_id = mv_review_id AND status = zif_aor_constants=>c_status-approved.
145 | IF sy-subrc <> 0.
146 | RAISE EXCEPTION TYPE zcx_aor_error
147 | EXPORTING
148 | textid = zcx_aor_error=>approve_before.
149 | ENDIF.
150 | ENDIF.
151 |
152 | UPDATE zaor_review
153 | SET status = zif_aor_constants=>c_status-closed
154 | WHERE review_id = mv_review_id. "#EC CI_SUBRC
155 | ASSERT sy-subrc = 0.
156 |
157 | ENDMETHOD.
158 |
159 |
160 | METHOD comments.
161 |
162 | CREATE OBJECT ro_comments
163 | EXPORTING
164 | io_review = me.
165 |
166 | ENDMETHOD.
167 |
168 |
169 | METHOD constructor.
170 |
171 | SELECT SINGLE review_id FROM zaor_review
172 | INTO mv_review_id
173 | WHERE review_id = iv_review_id.
174 | IF sy-subrc <> 0.
175 | RAISE EXCEPTION TYPE zcx_aor_error
176 | EXPORTING
177 | textid = zcx_aor_error=>not_found.
178 | ENDIF.
179 |
180 | ENDMETHOD.
181 |
182 |
183 | METHOD delete.
184 |
185 | ci( )->delete( ).
186 |
187 | DELETE FROM zaor_review
188 | WHERE review_id = mv_review_id. "#EC CI_SUBRC
189 |
190 | DELETE FROM zaor_review_obj
191 | WHERE review_id = mv_review_id. "#EC CI_SUBRC
192 |
193 | DELETE FROM zaor_comment
194 | WHERE review_id = mv_review_id. "#EC CI_SUBRC
195 |
196 | ENDMETHOD.
197 |
198 |
199 | METHOD diff.
200 |
201 | DATA: lt_objects TYPE zaor_object_tt,
202 | lv_trkorr TYPE trkorr,
203 | lt_diff TYPE zif_aor_types=>ty_diff_tt,
204 | lt_enhancement_diff TYPE zif_aor_types=>ty_enh_diff_tt,
205 | ls_enhanced_object TYPE zaor_object,
206 | ls_new_version TYPE vrsd,
207 | lr_failure TYPE REF TO cx_enh_root.
208 |
209 | FIELD-SYMBOLS: LIKE LINE OF rt_diff,
210 | LIKE LINE OF lt_diff,
211 | LIKE LINE OF lt_objects.
212 |
213 |
214 | lt_objects = objects_list_limu( ).
215 |
216 | LOOP AT lt_objects ASSIGNING .
217 |
218 | CLEAR: lt_enhancement_diff, ls_enhanced_object, lt_diff.
219 | lv_trkorr = mv_review_id(10).
220 | TRY.
221 | IF -object = 'ENHO'.
222 | zcl_aor_diff=>enhancement_diff( EXPORTING is_object =
223 | iv_trkorr = lv_trkorr
224 | IMPORTING et_diff = lt_enhancement_diff
225 | es_enhanced_object = ls_enhanced_object
226 | es_new_version = ls_new_version ).
227 | ELSE.
228 | zcl_aor_diff=>diff( EXPORTING iv_trkorr = lv_trkorr
229 | is_object =
230 | IMPORTING et_diff = lt_diff es_new_version = ls_new_version ).
231 | ENDIF.
232 | CATCH cx_enh_root INTO lr_failure.
233 | APPEND INITIAL LINE TO lt_diff ASSIGNING .
234 | -code = TEXT-001.
235 | APPEND INITIAL LINE TO lt_diff ASSIGNING .
236 | -code = lr_failure->get_text( ).
237 | ENDTRY.
238 | IF lines( lt_diff ) = 0 AND lines( lt_enhancement_diff ) = 0.
239 | CONTINUE.
240 | ENDIF.
241 |
242 | APPEND INITIAL LINE TO rt_diff ASSIGNING .
243 | -object = .
244 | -diff = lt_diff.
245 | -enhanced_object = ls_enhanced_object.
246 | -enhancement_diff = lt_enhancement_diff.
247 | -last_changed_date = ls_new_version-datum.
248 | -last_changed_time = ls_new_version-zeit.
249 |
250 | ENDLOOP.
251 |
252 | ENDMETHOD.
253 |
254 |
255 | METHOD fix_newlines.
256 |
257 | DATA: lv_index TYPE i,
258 | lt_lines TYPE TABLE OF string.
259 |
260 | FIELD-SYMBOLS: LIKE LINE OF lt_lines,
261 | LIKE LINE OF rt_comments,
262 | LIKE LINE OF it_comments.
263 |
264 |
265 | LOOP AT it_comments ASSIGNING .
266 | SPLIT -text AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_lines.
267 |
268 | LOOP AT lt_lines ASSIGNING .
269 | lv_index = sy-tabix.
270 |
271 | APPEND INITIAL LINE TO rt_comments ASSIGNING .
272 | IF lv_index = 1.
273 | MOVE-CORRESPONDING TO .
274 | ENDIF.
275 | -topic = -topic.
276 | -timestamp = -timestamp.
277 | -text = .
278 | ENDLOOP.
279 | ENDLOOP.
280 |
281 | ENDMETHOD.
282 |
283 |
284 | METHOD get_approvals.
285 | FIELD-SYMBOLS: TYPE zif_aor_types=>ty_approval_st.
286 |
287 | SELECT * FROM zaor_approvals
288 | INTO CORRESPONDING FIELDS OF TABLE rt_approvals
289 | WHERE review_id = mv_review_id.
290 |
291 | LOOP AT rt_approvals ASSIGNING .
292 | -time_formatted =
293 | zcl_aor_time=>format_timestamp( -timestamp ).
294 | ENDLOOP.
295 |
296 | ENDMETHOD.
297 |
298 |
299 | METHOD get_description.
300 |
301 | DATA: lv_trkorr TYPE trkorr.
302 |
303 |
304 | lv_trkorr = mv_review_id(10).
305 |
306 | rv_text = zcl_aor_transport=>get_description( lv_trkorr ).
307 |
308 | ENDMETHOD.
309 |
310 |
311 | METHOD get_status.
312 |
313 | SELECT SINGLE status
314 | FROM zaor_review INTO rv_status
315 | WHERE review_id = mv_review_id. "#EC CI_SUBRC
316 | ASSERT sy-subrc = 0.
317 |
318 | ENDMETHOD.
319 |
320 |
321 | METHOD header.
322 |
323 | SELECT SINGLE * FROM zaor_review
324 | INTO CORRESPONDING FIELDS OF rs_header
325 | WHERE review_id = mv_review_id. "#EC CI_SUBRC
326 | ASSERT sy-subrc = 0.
327 |
328 | rs_header-as4text = get_description( ).
329 |
330 | ENDMETHOD.
331 |
332 |
333 | METHOD objects_list.
334 |
335 | CASE header( )-base.
336 | WHEN zif_aor_constants=>c_base-transport.
337 | rt_data = zcl_aor_transport=>list_objects( mv_review_id ).
338 | WHEN OTHERS.
339 | SELECT * FROM zaor_review_obj
340 | INTO CORRESPONDING FIELDS OF TABLE rt_data
341 | WHERE review_id = mv_review_id ##too_many_itab_fields. "#EC CI_SUBRC
342 | ASSERT sy-subrc = 0.
343 | ENDCASE.
344 |
345 | ENDMETHOD.
346 |
347 |
348 | METHOD objects_list_limu.
349 |
350 | DATA: ls_e071 TYPE e071,
351 | lt_list TYPE e071_t,
352 | lt_vrso TYPE zif_aor_types=>ty_vrso_tt.
353 |
354 | FIELD-SYMBOLS: LIKE LINE OF rt_objects,
355 | LIKE LINE OF lt_vrso,
356 | LIKE LINE OF lt_list.
357 |
358 |
359 | lt_list = objects_list( ).
360 |
361 | LOOP AT lt_list ASSIGNING .
362 | MOVE-CORRESPONDING TO ls_e071.
363 |
364 | CALL FUNCTION 'SVRS_RESOLVE_E071_OBJ'
365 | EXPORTING
366 | e071_obj = ls_e071
367 | TABLES
368 | obj_tab = lt_vrso
369 | EXCEPTIONS
370 | not_versionable = 1
371 | OTHERS = 2. "#EC CI_SUBRC
372 | IF sy-subrc <> 0.
373 | CONTINUE.
374 | ENDIF.
375 |
376 | LOOP AT lt_vrso ASSIGNING .
377 | APPEND INITIAL LINE TO rt_objects ASSIGNING .
378 | -pgmid = 'LIMU'.
379 | -object = -objtype.
380 | -obj_name = -objname.
381 | ENDLOOP.
382 |
383 | ENDLOOP.
384 |
385 | ENDMETHOD.
386 |
387 |
388 | METHOD on_code_comment_posted.
389 |
390 | DELETE TABLE mv_pos_new_code_comments FROM comment.
391 |
392 | ENDMETHOD.
393 |
394 |
395 | METHOD pdf.
396 |
397 | DATA: ls_control TYPE ssfctrlop,
398 | ls_info TYPE ssfcrescl,
399 | lv_size TYPE i,
400 | lt_pdf TYPE STANDARD TABLE OF tline,
401 | lv_name TYPE rs38l_fnam,
402 | ls_header TYPE zif_aor_types=>ty_header,
403 | lt_objects TYPE e071_t,
404 | lt_comments TYPE zif_aor_types=>ty_comment_tt,
405 | ls_ci TYPE zif_aor_types=>ty_ci_st,
406 | lt_diff TYPE zif_aor_types=>ty_diff_list_tt,
407 | lt_approvals TYPE zif_aor_types=>ty_approvals_tt.
408 |
409 |
410 | CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
411 | EXPORTING
412 | formname = 'ZAOR_REVIEW'
413 | IMPORTING
414 | fm_name = lv_name
415 | EXCEPTIONS
416 | no_form = 1
417 | no_function_module = 2
418 | OTHERS = 3. "#EC CI_SUBRC
419 | ASSERT sy-subrc = 0.
420 |
421 | ls_control-no_dialog = abap_true.
422 | ls_control-getotf = abap_true.
423 |
424 | ls_header = header( ).
425 | lt_objects = objects_list( ).
426 | lt_comments = fix_newlines( comments( )->list( ) ).
427 | ls_ci = ci( )->results( ).
428 | lt_diff = diff( ).
429 | lt_approvals = get_approvals( ).
430 |
431 | CALL FUNCTION lv_name
432 | EXPORTING
433 | control_parameters = ls_control
434 | is_header = ls_header
435 | it_objects = lt_objects
436 | it_comments = lt_comments
437 | is_ci = ls_ci
438 | it_diff = lt_diff
439 | it_approvals = lt_approvals
440 | IMPORTING
441 | job_output_info = ls_info
442 | EXCEPTIONS
443 | formatting_error = 1
444 | internal_error = 2
445 | send_error = 3
446 | user_canceled = 4
447 | OTHERS = 5.
448 | IF sy-subrc = 4.
449 | RETURN.
450 | ENDIF.
451 | ASSERT sy-subrc = 0.
452 |
453 | CALL FUNCTION 'CONVERT_OTF'
454 | EXPORTING
455 | format = 'PDF'
456 | IMPORTING
457 | bin_filesize = lv_size
458 | TABLES
459 | otf = ls_info-otfdata[]
460 | lines = lt_pdf
461 | EXCEPTIONS
462 | err_max_linewidth = 1
463 | err_format = 2
464 | err_conv_not_possible = 3
465 | err_bad_otf = 4
466 | OTHERS = 5. "#EC CI_SUBRC
467 | ASSERT sy-subrc = 0.
468 |
469 | IF gv_folder IS INITIAL.
470 | cl_gui_frontend_services=>directory_browse(
471 | EXPORTING
472 | window_title = 'Select folder'
473 | CHANGING
474 | selected_folder = gv_folder
475 | EXCEPTIONS
476 | cntl_error = 1
477 | error_no_gui = 2
478 | not_supported_by_gui = 3
479 | OTHERS = 4 ) ##no_text. "#EC CI_SUBRC
480 | ASSERT sy-subrc = 0.
481 | IF gv_folder IS INITIAL.
482 | RETURN.
483 | ENDIF.
484 | ENDIF.
485 |
486 | CONCATENATE gv_folder '\' mv_review_id '_' sy-datlo '_' sy-timlo '.pdf'
487 | INTO rv_file ##no_text.
488 |
489 | cl_gui_frontend_services=>gui_download(
490 | EXPORTING
491 | bin_filesize = lv_size
492 | filename = rv_file
493 | filetype = 'BIN'
494 | CHANGING
495 | data_tab = lt_pdf
496 | EXCEPTIONS
497 | file_write_error = 1
498 | no_batch = 2
499 | gui_refuse_filetransfer = 3
500 | invalid_type = 4
501 | no_authority = 5
502 | unknown_error = 6
503 | header_not_allowed = 7
504 | separator_not_allowed = 8
505 | filesize_not_allowed = 9
506 | header_too_long = 10
507 | dp_error_create = 11
508 | dp_error_send = 12
509 | dp_error_write = 13
510 | unknown_dp_error = 14
511 | access_denied = 15
512 | dp_out_of_memory = 16
513 | disk_full = 17
514 | dp_timeout = 18
515 | file_not_found = 19
516 | dataprovider_exception = 20
517 | control_flush_error = 21
518 | not_supported_by_gui = 22
519 | error_no_gui = 23
520 | OTHERS = 24 ). "#EC CI_SUBRC
521 | ASSERT sy-subrc = 0.
522 |
523 | MESSAGE s006(zabapopenreview) WITH rv_file.
524 |
525 | ENDMETHOD.
526 |
527 |
528 | METHOD pre_add_code_comment.
529 |
530 | TRY.
531 | iv_position-topic = cl_system_uuid=>if_system_uuid_static~create_uuid_c22( ).
532 | CATCH cx_uuid_error.
533 | ASSERT 1 = 0.
534 | ENDTRY.
535 | iv_position-review_id = mv_review_id.
536 |
537 | INSERT iv_position INTO TABLE mv_pos_new_code_comments.
538 |
539 | ENDMETHOD.
540 |
541 |
542 | METHOD remove_approval.
543 |
544 | DELETE FROM zaor_approvals WHERE review_id = mv_review_id AND approved_by = sy-uname.
545 |
546 | ENDMETHOD.
547 | ENDCLASS.
548 |
--------------------------------------------------------------------------------
/src/zcl_aor_diff.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_aor_diff DEFINITION
2 | PUBLIC
3 | CREATE PUBLIC .
4 |
5 | PUBLIC SECTION.
6 |
7 | CLASS-METHODS diff
8 | IMPORTING
9 | !iv_trkorr TYPE trkorr
10 | !is_object TYPE zaor_object
11 | EXPORTING
12 | !et_diff TYPE zif_aor_types=>ty_diff_tt
13 | !es_new_version TYPE vrsd .
14 | CLASS-METHODS enhancement_diff
15 | IMPORTING
16 | !is_object TYPE zaor_object
17 | !iv_trkorr TYPE trkorr
18 | EXPORTING
19 | !et_diff TYPE zif_aor_types=>ty_enh_diff_tt
20 | !es_enhanced_object TYPE zaor_object
21 | !es_new_version TYPE vrsd
22 | RAISING
23 | cx_enh_root .
24 | PROTECTED SECTION.
25 | PRIVATE SECTION.
26 |
27 | TYPES: BEGIN OF ty_search_result,
28 | tabix_start TYPE i,
29 | found_start TYPE sap_bool,
30 | tabix_end TYPE i,
31 | found_end TYPE sap_bool,
32 | END OF ty_search_result.
33 |
34 | CLASS-METHODS filter_versions
35 | IMPORTING
36 | !iv_trkorr TYPE trkorr
37 | CHANGING
38 | !ct_list TYPE vrsd_tab .
39 | CLASS-METHODS add_newlines
40 | CHANGING
41 | !ct_diff TYPE zif_aor_types=>ty_diff_tt .
42 | CLASS-METHODS delta
43 | IMPORTING
44 | !it_old TYPE STANDARD TABLE
45 | !it_new TYPE STANDARD TABLE
46 | it_boundary_lines TYPE zif_aor_types=>ty_boundary_lines_tt OPTIONAL
47 | RETURNING
48 | VALUE(rt_delta) TYPE vxabapt255_tab .
49 | CLASS-METHODS get_meth
50 | IMPORTING
51 | !iv_object_name TYPE versobjnam
52 | !iv_versno TYPE versno
53 | RETURNING
54 | VALUE(rt_source) TYPE abaptxt255_tab .
55 | CLASS-METHODS get_func
56 | IMPORTING
57 | !iv_object_name TYPE versobjnam
58 | !iv_versno TYPE versno
59 | RETURNING
60 | VALUE(rt_source) TYPE abaptxt255_tab .
61 | CLASS-METHODS get_reps
62 | IMPORTING
63 | !iv_object_name TYPE versobjnam
64 | !iv_versno TYPE versno
65 | RETURNING
66 | VALUE(rt_source) TYPE abaptxt255_tab .
67 | CLASS-METHODS get_wdyc_implementation
68 | IMPORTING
69 | !iv_object_name TYPE versobjnam
70 | !iv_versno TYPE versno
71 | EXPORTING
72 | et_source TYPE abaptxt255_tab
73 | et_boundary_lines TYPE zif_aor_types=>ty_boundary_lines_tt.
74 | CLASS-METHODS render
75 | IMPORTING
76 | !it_old TYPE abaptxt255_tab
77 | !it_new TYPE abaptxt255_tab
78 | !it_delta TYPE vxabapt255_tab
79 | RETURNING
80 | VALUE(rt_diff) TYPE zif_aor_types=>ty_diff_tt .
81 | CLASS-METHODS resolve
82 | IMPORTING
83 | !is_object TYPE zaor_object
84 | RETURNING
85 | VALUE(rt_vrso) TYPE zif_aor_types=>ty_vrso_tt .
86 | CLASS-METHODS version_list
87 | IMPORTING
88 | !iv_object TYPE trobjtype
89 | !iv_obj_name TYPE trobj_name
90 | RETURNING
91 | VALUE(rt_version_list) TYPE vrsd_tab .
92 | CLASS-METHODS render_hook_diff
93 | IMPORTING
94 | !ir_version_manager_new TYPE REF TO if_enh_tool
95 | !ir_version_manager_old TYPE REF TO if_enh_tool
96 | EXPORTING
97 | !et_diff TYPE zif_aor_types=>ty_enh_diff_tt
98 | !es_enhanced_object TYPE zaor_object
99 | RAISING
100 | cx_enh_root .
101 | CLASS-METHODS render_class_diff
102 | IMPORTING
103 | !ir_version_manager_new TYPE REF TO if_enh_tool
104 | !ir_version_manager_old TYPE REF TO if_enh_tool
105 | EXPORTING
106 | !et_diff TYPE zif_aor_types=>ty_enh_diff_tt
107 | !es_enhanced_object TYPE zaor_object
108 | RAISING
109 | cx_enh_root.
110 | ENDCLASS.
111 |
112 |
113 |
114 | CLASS zcl_aor_diff IMPLEMENTATION.
115 |
116 |
117 | METHOD add_newlines.
118 |
119 | DATA: lv_current TYPE i,
120 | lv_index TYPE i,
121 | lv_new TYPE i.
122 |
123 | FIELD-SYMBOLS: LIKE LINE OF ct_diff.
124 |
125 |
126 | LOOP AT ct_diff ASSIGNING .
127 | lv_index = sy-tabix.
128 |
129 | IF sy-tabix = 1.
130 | lv_current = -new.
131 | ENDIF.
132 | lv_new = -new.
133 |
134 | IF NOT lv_new IS INITIAL AND lv_new > lv_current + 1.
135 | INSERT INITIAL LINE INTO ct_diff INDEX lv_index.
136 | ENDIF.
137 |
138 | IF NOT lv_new IS INITIAL.
139 | lv_current = lv_new.
140 | ENDIF.
141 | ENDLOOP.
142 |
143 | ENDMETHOD.
144 |
145 |
146 | METHOD delta.
147 |
148 | DATA: lt_trdirtab_old TYPE TABLE OF trdir,
149 | lt_trdirtab_new TYPE TABLE OF trdir,
150 | lt_trdir_delta TYPE TABLE OF xtrdir,
151 | ls_line TYPE vxabapt255,
152 | ls_boundary_line TYPE REF TO zif_aor_types=>ty_boundary_line,
153 | ls_search_result TYPE ty_search_result,
154 | lr_delta TYPE REF TO vxabapt255.
155 |
156 | CALL FUNCTION 'SVRS_COMPUTE_DELTA_REPS'
157 | EXPORTING
158 | ignore_case_differences = abap_true
159 | TABLES
160 | texttab_old = it_old
161 | texttab_new = it_new
162 | trdirtab_old = lt_trdirtab_old
163 | trdirtab_new = lt_trdirtab_new
164 | trdir_delta = lt_trdir_delta
165 | text_delta = rt_delta.
166 |
167 | LOOP AT it_boundary_lines REFERENCE INTO ls_boundary_line.
168 | LOOP AT rt_delta TRANSPORTING NO FIELDS
169 | WHERE number BETWEEN ls_boundary_line->*-start AND ls_boundary_line->*-end.
170 | ENDLOOP.
171 | IF sy-subrc <> 0.
172 | CONTINUE.
173 | ENDIF.
174 |
175 | READ TABLE rt_delta REFERENCE INTO lr_delta
176 | WITH KEY number = ls_boundary_line->*-start BINARY SEARCH.
177 | ls_search_result-tabix_start = sy-tabix.
178 | IF sy-subrc = 0 AND lr_delta->*-vrsflag <> 'I'.
179 | ls_search_result-found_start = abap_true.
180 | ENDIF.
181 |
182 | READ TABLE rt_delta REFERENCE INTO lr_delta
183 | WITH KEY number = ls_boundary_line->*-end BINARY SEARCH.
184 | ls_search_result-tabix_end = sy-tabix.
185 | IF sy-subrc = 0 AND lr_delta->*-vrsflag <> 'I'.
186 | ls_search_result-found_end = abap_true.
187 | ENDIF.
188 |
189 | IF ls_search_result-found_start = abap_false.
190 | READ TABLE it_old INTO ls_line-line INDEX ls_boundary_line->*-start.
191 | ls_line-number = sy-tabix.
192 | INSERT ls_line INTO rt_delta INDEX ls_search_result-tabix_start.
193 | ls_search_result-tabix_end = ls_search_result-tabix_end + 1.
194 | ENDIF.
195 | IF ls_search_result-found_end = abap_false.
196 | READ TABLE it_old INTO ls_line-line INDEX ls_boundary_line->*-end.
197 | ls_line-number = sy-tabix.
198 | INSERT ls_line INTO rt_delta INDEX ls_search_result-tabix_end.
199 | ENDIF.
200 | ENDLOOP.
201 |
202 |
203 | ENDMETHOD.
204 |
205 |
206 | METHOD diff.
207 |
208 | DATA: lt_new TYPE STANDARD TABLE OF abaptxt255,
209 | lt_old TYPE STANDARD TABLE OF abaptxt255,
210 | lt_version_list TYPE vrsd_tab,
211 | lv_obj_name TYPE trobj_name,
212 | lt_delta TYPE vxabapt255_tab,
213 | ls_old LIKE LINE OF lt_version_list,
214 | lt_vrso TYPE zif_aor_types=>ty_vrso_tt,
215 | ls_vrso LIKE LINE OF lt_vrso,
216 | lt_boundary_lines TYPE zif_aor_types=>ty_boundary_lines_tt.
217 |
218 |
219 | ASSERT NOT is_object IS INITIAL.
220 |
221 | lt_vrso = resolve( is_object ).
222 |
223 | DELETE lt_vrso WHERE objtype = 'DOCU'.
224 |
225 | IF lt_vrso IS INITIAL.
226 | * non versionable object
227 | RETURN.
228 | ENDIF.
229 |
230 | ASSERT lines( lt_vrso ) = 1.
231 | READ TABLE lt_vrso INDEX 1 INTO ls_vrso.
232 |
233 | lv_obj_name = ls_vrso-objname.
234 | lt_version_list = version_list( iv_object = ls_vrso-objtype
235 | iv_obj_name = lv_obj_name ).
236 | filter_versions( EXPORTING iv_trkorr = iv_trkorr
237 | CHANGING ct_list = lt_version_list ).
238 | IF lines( lt_version_list ) = 0.
239 | RETURN.
240 | ENDIF.
241 |
242 | READ TABLE lt_version_list INDEX 1 INTO es_new_version.
243 | ASSERT sy-subrc = 0.
244 | READ TABLE lt_version_list INDEX 2 INTO ls_old.
245 |
246 | CASE ls_vrso-objtype.
247 | WHEN 'REPS'.
248 | lt_new = get_reps( iv_object_name = ls_vrso-objname
249 | iv_versno = es_new_version-versno ).
250 | IF NOT ls_old IS INITIAL.
251 | lt_old = get_reps( iv_object_name = ls_vrso-objname
252 | iv_versno = ls_old-versno ).
253 | ENDIF.
254 | WHEN 'METH'.
255 | lt_new = get_meth( iv_object_name = ls_vrso-objname
256 | iv_versno = es_new_version-versno ).
257 | IF NOT ls_old IS INITIAL.
258 | lt_old = get_meth( iv_object_name = ls_vrso-objname
259 | iv_versno = ls_old-versno ).
260 | ENDIF.
261 | WHEN 'FUNC'.
262 | lt_new = get_func( iv_object_name = ls_vrso-objname
263 | iv_versno = es_new_version-versno ).
264 | IF NOT ls_old IS INITIAL.
265 | lt_old = get_func( iv_object_name = ls_vrso-objname
266 | iv_versno = ls_old-versno ).
267 | ENDIF.
268 | WHEN 'WDYC'.
269 | get_wdyc_implementation( EXPORTING iv_object_name = ls_vrso-objname
270 | iv_versno = es_new_version-versno
271 | IMPORTING et_source = lt_new ).
272 | IF NOT ls_old IS INITIAL.
273 | get_wdyc_implementation( EXPORTING
274 | iv_object_name = ls_vrso-objname iv_versno = ls_old-versno
275 | IMPORTING et_source = lt_old et_boundary_lines = lt_boundary_lines ).
276 | ENDIF.
277 | WHEN OTHERS.
278 | * todo
279 | RETURN.
280 | ENDCASE.
281 |
282 | lt_delta = delta( it_old = lt_old
283 | it_new = lt_new
284 | it_boundary_lines = lt_boundary_lines ).
285 |
286 | et_diff = render( it_old = lt_old
287 | it_new = lt_new
288 | it_delta = lt_delta ).
289 |
290 | add_newlines( CHANGING ct_diff = et_diff ).
291 |
292 | ENDMETHOD.
293 |
294 |
295 | METHOD enhancement_diff.
296 | DATA: lr_version_manager_new TYPE REF TO if_enh_tool,
297 | lr_version_manager_old TYPE REF TO if_enh_tool,
298 | lv_enhancement_id TYPE enhname,
299 | lv_obj_name TYPE trobj_name,
300 | lt_version_list TYPE vrsd_tab,
301 | lt_vrso TYPE zif_aor_types=>ty_vrso_tt,
302 | ls_vrso LIKE LINE OF lt_vrso,
303 | ls_version_old TYPE REF TO vrsd.
304 |
305 | lv_enhancement_id = is_object-obj_name.
306 |
307 | lt_vrso = resolve( is_object ).
308 | IF lt_vrso IS INITIAL.
309 | * non versionable object
310 | RETURN.
311 | ENDIF.
312 |
313 | ASSERT lines( lt_vrso ) = 1.
314 | READ TABLE lt_vrso INDEX 1 INTO ls_vrso.
315 |
316 | ASSERT ls_vrso-objtype = 'ENHO'.
317 | lv_obj_name = ls_vrso-objname.
318 | lt_version_list = version_list( iv_object = ls_vrso-objtype
319 | iv_obj_name = lv_obj_name ).
320 | filter_versions( EXPORTING iv_trkorr = iv_trkorr
321 | CHANGING ct_list = lt_version_list ).
322 | IF lines( lt_version_list ) = 0.
323 | RETURN.
324 | ENDIF.
325 |
326 | READ TABLE lt_version_list INDEX 1 INTO es_new_version.
327 | ASSERT sy-subrc = 0.
328 | lr_version_manager_new = cl_enh_factory=>get_enhancement(
329 | enhancement_id = lv_enhancement_id
330 | versno = es_new_version-versno ).
331 | READ TABLE lt_version_list INDEX 2 REFERENCE INTO ls_version_old.
332 | IF sy-subrc = 0.
333 | lr_version_manager_old = cl_enh_factory=>get_enhancement(
334 | enhancement_id = lv_enhancement_id
335 | versno = ls_version_old->*-versno ).
336 | ENDIF.
337 |
338 | CASE lr_version_manager_new->get_tool( ).
339 | WHEN 'HOOK_IMPL'.
340 | render_hook_diff( EXPORTING ir_version_manager_new = lr_version_manager_new
341 | ir_version_manager_old = lr_version_manager_old
342 | IMPORTING et_diff = et_diff es_enhanced_object = es_enhanced_object ).
343 | WHEN 'CLASENH'.
344 | render_class_diff( EXPORTING ir_version_manager_new = lr_version_manager_new
345 | ir_version_manager_old = lr_version_manager_old
346 | IMPORTING et_diff = et_diff es_enhanced_object = es_enhanced_object ).
347 | ENDCASE.
348 |
349 | ENDMETHOD.
350 |
351 |
352 | METHOD filter_versions.
353 |
354 | DATA: lv_index TYPE i,
355 | lv_found TYPE abap_bool,
356 | lv_trfunction TYPE e070-trfunction.
357 |
358 | FIELD-SYMBOLS: LIKE LINE OF ct_list.
359 |
360 |
361 | LOOP AT ct_list ASSIGNING .
362 | lv_index = sy-tabix.
363 |
364 | IF -korrnum IS INITIAL.
365 | lv_found = abap_false.
366 | ELSEIF -korrnum = iv_trkorr.
367 | lv_found = abap_true.
368 | ELSEIF -versno = '00000'.
369 | SELECT SINGLE COUNT( * ) FROM e070
370 | WHERE trkorr = -korrnum
371 | AND strkorr = iv_trkorr.
372 | IF sy-subrc = 0.
373 | lv_found = abap_true.
374 | ENDIF.
375 | ENDIF.
376 |
377 | IF lv_found = abap_false.
378 | DELETE ct_list INDEX lv_index.
379 | CONTINUE.
380 | ENDIF.
381 |
382 | SELECT SINGLE trfunction
383 | INTO lv_trfunction
384 | FROM e070
385 | WHERE trkorr = -korrnum.
386 | IF sy-subrc = 0 AND lv_trfunction = 'T'.
387 | * remove transport of copies.
388 | DELETE ct_list INDEX lv_index.
389 | ENDIF.
390 | ENDLOOP.
391 |
392 | ENDMETHOD.
393 |
394 |
395 | METHOD get_func.
396 |
397 | CALL FUNCTION 'SVRS_GET_VERSION_FUNC_40'
398 | EXPORTING
399 | object_name = iv_object_name
400 | versno = iv_versno
401 | TABLES
402 | uincl_tab = rt_source
403 | EXCEPTIONS
404 | no_version = 1
405 | system_failure = 2
406 | communication_failure = 3
407 | OTHERS = 4. "#EC CI_SUBRC
408 | ASSERT sy-subrc = 0.
409 |
410 | ENDMETHOD.
411 |
412 |
413 | METHOD get_meth.
414 |
415 | CALL FUNCTION 'SVRS_GET_VERSION_METH_40'
416 | EXPORTING
417 | object_name = iv_object_name
418 | versno = iv_versno
419 | TABLES
420 | repos_tab = rt_source
421 | EXCEPTIONS
422 | no_version = 1
423 | system_failure = 2
424 | communication_failure = 3
425 | OTHERS = 4. "#EC CI_SUBRC
426 | ASSERT sy-subrc = 0.
427 |
428 | ENDMETHOD.
429 |
430 |
431 | METHOD get_reps.
432 |
433 | CALL FUNCTION 'SVRS_GET_VERSION_REPS_40'
434 | EXPORTING
435 | object_name = iv_object_name
436 | versno = iv_versno
437 | TABLES
438 | repos_tab = rt_source
439 | EXCEPTIONS
440 | no_version = 1
441 | system_failure = 2
442 | communication_failure = 3
443 | OTHERS = 4. "#EC CI_SUBRC
444 | ASSERT sy-subrc = 0.
445 |
446 | ENDMETHOD.
447 |
448 |
449 | METHOD get_wdyc_implementation.
450 | DATA: lt_components TYPE STANDARD TABLE OF wdy_ctlr_compo_vrs,
451 | lt_components_source TYPE STANDARD TABLE OF wdy_ctlr_compo_source_vrs,
452 | lr_component TYPE REF TO wdy_ctlr_compo_vrs,
453 | lr_component_source TYPE REF TO wdy_ctlr_compo_source_vrs,
454 | ls_boundary_line TYPE zif_aor_types=>ty_boundary_line.
455 |
456 | CALL FUNCTION 'SVRS_GET_VERSION_WDYC_40'
457 | EXPORTING
458 | object_name = iv_object_name
459 | versno = iv_versno
460 | TABLES
461 | ccomp_tab = lt_components
462 | ccoms_tab = lt_components_source.
463 |
464 | LOOP AT lt_components REFERENCE INTO lr_component
465 | WHERE cmptype = 'CL_WDY_MD_CONTROLLER_METHOD' OR
466 | cmptype = 'CL_WDY_MD_SUPPLY_FUNCTION' OR
467 | cmptype = 'CL_WDY_MD_CTLR_EVENT_HANDLER'.
468 |
469 | CLEAR ls_boundary_line.
470 | LOOP AT lt_components_source REFERENCE INTO lr_component_source
471 | WHERE component_name = lr_component->*-component_name
472 | AND controller_name = lr_component->*-controller_name AND cmpname = lr_component->*-cmpname.
473 |
474 | APPEND lr_component_source->*-source_line TO et_source.
475 | ls_boundary_line-end = sy-tabix.
476 | IF lr_component_source->*-line_number = 1.
477 | ls_boundary_line-start = ls_boundary_line-end.
478 | ENDIF.
479 |
480 | ENDLOOP.
481 | IF sy-subrc = 0.
482 | INSERT ls_boundary_line INTO TABLE et_boundary_lines.
483 | ENDIF.
484 |
485 | ENDLOOP.
486 |
487 | ENDMETHOD.
488 |
489 |
490 | METHOD render.
491 |
492 | DATA: lv_diff TYPE i.
493 |
494 | FIELD-SYMBOLS: LIKE LINE OF rt_diff,
495 | LIKE LINE OF it_delta,
496 | LIKE LINE OF it_old.
497 |
498 |
499 | LOOP AT it_delta ASSIGNING .
500 |
501 | CASE -vrsflag.
502 | WHEN 'I'.
503 | READ TABLE it_new INDEX -number + lv_diff ASSIGNING .
504 | ASSERT sy-subrc = 0.
505 | APPEND INITIAL LINE TO rt_diff ASSIGNING .
506 | -new = -number + lv_diff.
507 | -updkz = 'I'.
508 | -code = -line.
509 |
510 | lv_diff = lv_diff + 1.
511 | WHEN 'D'.
512 | READ TABLE it_old INDEX -number ASSIGNING .
513 | ASSERT sy-subrc = 0.
514 | APPEND INITIAL LINE TO rt_diff ASSIGNING .
515 | -old = -number.
516 | -updkz = 'D'.
517 | -code = -line.
518 |
519 | lv_diff = lv_diff - 1.
520 | WHEN 'U'.
521 | READ TABLE it_new INDEX -number + lv_diff ASSIGNING .
522 | ASSERT sy-subrc = 0.
523 | APPEND INITIAL LINE TO rt_diff ASSIGNING .
524 | -new = -number + lv_diff.
525 | -updkz = 'U'.
526 | -code = -line.
527 |
528 | READ TABLE it_old INDEX -number ASSIGNING .
529 | ASSERT sy-subrc = 0.
530 | APPEND INITIAL LINE TO rt_diff ASSIGNING .
531 | -old =