├── .abapgit.xml ├── LICENSE ├── README.md ├── abaplint.json └── src ├── package.devc.xml ├── zabapopenreview.msag.xml ├── zaor_approvals.tabl.xml ├── zaor_aprove_bef_trans.dtel.xml ├── zaor_base.doma.xml ├── zaor_base.dtel.xml ├── zaor_checked.tabl.xml ├── zaor_checklist.tabl.xml ├── zaor_checklist_answer.dtel.xml ├── zaor_checklist_description.dtel.xml ├── zaor_checklist_item.dtel.xml ├── zaor_ci_filter.doma.xml ├── zaor_ci_filter.dtel.xml ├── zaor_code_com.tabl.xml ├── zaor_comment.tabl.xml ├── zaor_config.tabl.xml ├── zaor_configs.tobj.xml ├── zaor_import_default_checklist.prog.abap ├── zaor_import_default_checklist.prog.xml ├── zaor_number_of_approvals.dtel.xml ├── zaor_object.tabl.xml ├── zaor_object_tt.ttyp.xml ├── zaor_review.ssfo.xml ├── zaor_review.ssst.xml ├── zaor_review.tabl.xml ├── zaor_review_closing.enho.d773c878.abap ├── zaor_review_closing.enho.xml ├── zaor_review_id.dtel.xml ├── zaor_review_obj.tabl.xml ├── zaor_status.doma.xml ├── zaor_status.dtel.xml ├── zaor_topic.dtel.xml ├── zcl_aor_checklist.clas.abap ├── zcl_aor_checklist.clas.xml ├── zcl_aor_ci.clas.abap ├── zcl_aor_ci.clas.xml ├── zcl_aor_comments.clas.abap ├── zcl_aor_comments.clas.xml ├── zcl_aor_diff.clas.abap ├── zcl_aor_diff.clas.testclasses.abap ├── zcl_aor_diff.clas.xml ├── zcl_aor_review.clas.abap ├── zcl_aor_review.clas.xml ├── zcl_aor_service.clas.abap ├── zcl_aor_service.clas.xml ├── zcl_aor_time.clas.abap ├── zcl_aor_time.clas.xml ├── zcl_aor_transport.clas.abap ├── zcl_aor_transport.clas.locals_imp.abap ├── zcl_aor_transport.clas.xml ├── zcl_im_review_approved.clas.abap ├── zcl_im_review_approved.clas.xml ├── zcx_aor_error.clas.abap ├── zcx_aor_error.clas.xml ├── zif_aor_constants.intf.abap ├── zif_aor_constants.intf.xml ├── zif_aor_types.intf.abap ├── zif_aor_types.intf.xml ├── zreview.prog.abap ├── zreview.prog.xml └── zreview_approved.sxci.xml /.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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Source-Coude Revies 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /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/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_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 | ZAOR_APROVE_BEF_TRANS 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_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_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_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_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_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_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_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_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_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/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/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_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 | -------------------------------------------------------------------------------- /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_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_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/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_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/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_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/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_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/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 | ENHO 53 | ZAOR_REVIEW_CLOSING 54 | 000D3A8FA0651EEB9EDF5FFD038648DE 55 | 0001 56 | 57 | 58 |
59 |
60 |
61 | -------------------------------------------------------------------------------- /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_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/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_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_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/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/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_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 | -------------------------------------------------------------------------------- /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_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 | -------------------------------------------------------------------------------- /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_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 = -number. 532 | -updkz = 'U'. 533 | -code = -line. 534 | WHEN space. 535 | APPEND INITIAL LINE TO rt_diff ASSIGNING . 536 | -new = -number. 537 | -old = -number. 538 | -code = -line. 539 | ENDCASE. 540 | 541 | ENDLOOP. 542 | 543 | LOOP AT rt_diff ASSIGNING . 544 | IF -new = 0. 545 | CLEAR -new. 546 | ENDIF. 547 | IF -old = 0. 548 | CLEAR -old. 549 | ENDIF. 550 | ENDLOOP. 551 | 552 | * todo, merge/rearrange sequential updated lines? 553 | 554 | ENDMETHOD. 555 | 556 | 557 | METHOD render_class_diff. 558 | DATA: lr_version_manager_new TYPE REF TO cl_enh_tool_class, 559 | lr_version_manager_old TYPE REF TO cl_enh_tool_class, 560 | ls_enhancement_new TYPE enhclassmethdata, 561 | ls_enhancement_old TYPE enhclassmethdata, 562 | ls_new_method_definition TYPE REF TO enhnewmeth_data, 563 | ls_new_source TYPE REF TO seo_method_source, 564 | lt_new_source_code TYPE abaptxt255_tab, 565 | ls_old_method_definition TYPE REF TO enhnewmeth_data, 566 | ls_old_source TYPE REF TO seo_method_source, 567 | lt_old_source_code TYPE abaptxt255_tab, 568 | lt_delta TYPE vxabapt255_tab, 569 | lv_class_name TYPE seoclsname, 570 | ls_diff_method TYPE zif_aor_types=>ty_enh_diff_st. 571 | 572 | lr_version_manager_new ?= ir_version_manager_new. 573 | IF ir_version_manager_old IS BOUND. 574 | lr_version_manager_old ?= ir_version_manager_old. 575 | ENDIF. 576 | 577 | es_enhanced_object-pgmid = 'R3TR'. 578 | es_enhanced_object-object = 'CLAS'. 579 | lr_version_manager_new->get_class( 580 | IMPORTING class_name = lv_class_name ). 581 | es_enhanced_object-obj_name = lv_class_name. 582 | 583 | lr_version_manager_new->get_all_data_for_class( EXPORTING class_name = lv_class_name 584 | IMPORTING enha_data = ls_enhancement_new ). 585 | IF lr_version_manager_old IS BOUND. 586 | lr_version_manager_old->get_all_data_for_class( EXPORTING class_name = lv_class_name 587 | IMPORTING enha_data = ls_enhancement_old ). 588 | ENDIF. 589 | " methods 590 | LOOP AT ls_enhancement_new-enh_newmethodes REFERENCE INTO ls_new_method_definition. 591 | CLEAR: lt_new_source_code, lt_old_source_code, lt_delta. 592 | READ TABLE ls_enhancement_new-enh_methsources REFERENCE INTO ls_new_source 593 | WITH KEY cpdname = ls_new_method_definition->*-methkey-cmpname. 594 | ASSERT sy-subrc = 0. 595 | APPEND LINES OF ls_new_source->*-source TO lt_new_source_code. 596 | 597 | READ TABLE ls_enhancement_old-enh_newmethodes REFERENCE INTO ls_old_method_definition 598 | WITH KEY methkey = ls_new_method_definition->*-methkey. 599 | IF sy-subrc = 0. 600 | READ TABLE ls_enhancement_old-enh_methsources REFERENCE INTO ls_old_source 601 | WITH KEY cpdname = ls_old_method_definition->*-methkey-cmpname. 602 | APPEND LINES OF ls_old_source->*-source TO lt_old_source_code. 603 | ENDIF. 604 | 605 | lt_delta = delta( it_old = lt_old_source_code it_new = lt_new_source_code ). 606 | IF lt_delta IS NOT INITIAL. 607 | ls_diff_method-id = lines( et_diff ) + 1. 608 | ls_diff_method-full_name = |Method { ls_new_method_definition->*-methkey-cmpname }|. 609 | ls_diff_method-diff = render( it_old = lt_old_source_code it_new = lt_new_source_code 610 | it_delta = lt_delta ). 611 | add_newlines( CHANGING ct_diff = ls_diff_method-diff ). 612 | INSERT ls_diff_method INTO TABLE et_diff. 613 | ENDIF. 614 | 615 | ENDLOOP. 616 | 617 | ENDMETHOD. 618 | 619 | 620 | METHOD render_hook_diff. 621 | DATA: lr_version_manager_new TYPE REF TO cl_enh_tool_hook_impl, 622 | lr_version_manager_old TYPE REF TO cl_enh_tool_hook_impl, 623 | ls_hook_header TYPE enh_hook_admin, 624 | lt_hook_implementations TYPE enh_hook_impl_it, 625 | lr_hook_impl_new TYPE REF TO enh_hook_impl, 626 | ls_hook_impl_old TYPE enh_hook_impl, 627 | lt_hook_impl_old TYPE enh_hook_impl_it, 628 | lt_source_new TYPE STANDARD TABLE OF abaptxt255, 629 | lt_source_old LIKE lt_source_new, 630 | lt_delta TYPE vxabapt255_tab, 631 | ls_diff_hook LIKE LINE OF et_diff. 632 | 633 | lr_version_manager_new ?= ir_version_manager_new. 634 | IF ir_version_manager_old IS BOUND. 635 | lr_version_manager_old ?= ir_version_manager_old. 636 | ENDIF. 637 | 638 | ir_version_manager_new->if_enh_object~get_data( IMPORTING data = ls_hook_header ). 639 | 640 | es_enhanced_object-pgmid = ls_hook_header-pgmid. 641 | es_enhanced_object-object = ls_hook_header-org_obj_type. 642 | es_enhanced_object-obj_name = ls_hook_header-org_obj_name. 643 | 644 | lt_hook_implementations = lr_version_manager_new->get_hook_impls( ). 645 | LOOP AT lt_hook_implementations REFERENCE INTO lr_hook_impl_new. 646 | 647 | CLEAR: lt_source_new, lt_source_old, lt_delta. 648 | 649 | APPEND LINES OF lr_hook_impl_new->*-source TO lt_source_new. 650 | IF ir_version_manager_old IS BOUND. 651 | lt_hook_impl_old = lr_version_manager_old->get_hook_impls( ). 652 | READ TABLE lt_hook_impl_old INTO ls_hook_impl_old 653 | WITH KEY id = lr_hook_impl_new->*-id. 654 | IF sy-subrc = 0. 655 | APPEND LINES OF ls_hook_impl_old-source TO lt_source_old. 656 | ENDIF. 657 | ENDIF. 658 | lt_delta = delta( it_old = lt_source_old it_new = lt_source_new ). 659 | IF lt_delta IS NOT INITIAL. 660 | ls_diff_hook-id = lr_hook_impl_new->*-id. 661 | ls_diff_hook-full_name = lr_hook_impl_new->*-full_name. 662 | ls_diff_hook-diff = render( it_old = lt_source_old it_new = lt_source_new it_delta = lt_delta ). 663 | add_newlines( CHANGING ct_diff = ls_diff_hook-diff ). 664 | INSERT ls_diff_hook INTO TABLE et_diff. 665 | ENDIF. 666 | 667 | ENDLOOP. 668 | 669 | ENDMETHOD. 670 | 671 | 672 | METHOD resolve. 673 | 674 | DATA: ls_e071 TYPE e071. 675 | 676 | 677 | MOVE-CORRESPONDING is_object TO ls_e071. 678 | 679 | CALL FUNCTION 'SVRS_RESOLVE_E071_OBJ' 680 | EXPORTING 681 | e071_obj = ls_e071 682 | TABLES 683 | obj_tab = rt_vrso 684 | EXCEPTIONS 685 | not_versionable = 1 686 | OTHERS = 2 ##FM_SUBRC_OK. "#EC CI_SUBRC 687 | 688 | ENDMETHOD. 689 | 690 | 691 | METHOD version_list. 692 | 693 | DATA: lt_lversno_list TYPE STANDARD TABLE OF vrsn, 694 | lv_vobjname TYPE vrsd-objname, 695 | lv_vobjtype TYPE vrsd-objtype. 696 | 697 | ASSERT NOT iv_object IS INITIAL. 698 | ASSERT NOT iv_obj_name IS INITIAL. 699 | 700 | lv_vobjname = iv_obj_name. 701 | lv_vobjtype = iv_object. 702 | 703 | CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY_46' 704 | EXPORTING 705 | objname = lv_vobjname 706 | objtype = lv_vobjtype 707 | TABLES 708 | lversno_list = lt_lversno_list 709 | version_list = rt_version_list 710 | EXCEPTIONS 711 | no_entry = 1 712 | communication_failure_ = 2 713 | system_failure = 3 714 | OTHERS = 4 ##FM_SUBRC_OK. "#EC CI_SUBRC 715 | 716 | ENDMETHOD. 717 | ENDCLASS. 718 | -------------------------------------------------------------------------------- /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_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_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_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/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_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_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/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_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_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/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 | -------------------------------------------------------------------------------- /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_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/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/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/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/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/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/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/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 | --------------------------------------------------------------------------------