Some colleagues complained that when they consume CDS view in ABAP source code, for example the view below: I_Product
The reason is our team use “Keyword Uppercase” in Pretty Printer setting, and the printer implementation will not differentiate CDS view and normal ABAP variable.
Our requirement is, after Pretty Printer button is clicked, the CDS view name in ABAP source code could remain unchanged. In my example above, it should still be “I_Product”.
They are many ways to achieve this requirement via enhancement, unfortunately the package of pretty printer is configured as non-extensible.
So the only feasible approach is to directly change standard implementation, which is not a good solution but it works.
Open include program LSPPRP04, add a new line in line 167:
CHECK zcl_cds_view_case_tool=>is_cds_view( <abap_token>-lexem ) = abap_false.
The idea is to ignore the LOWER CASE handling of current ABAP token, once it is detected to represent an CDS view.
Test again:before Pretty Printer is clicked, the red line represents the name to be converted, the blue line for CDS view name which will not be touched:
After clicked, it works as expected.
Source code of zcl_cds_view_case_tool:
class ZCL_CDS_VIEW_CASE_TOOL definition
public
final
create public .
public section.
class-methods IS_CDS_VIEW
importing
!IV_NAME type ABPTOKEN-LEXEM
returning
value(RV_RESULT) type ABAP_BOOL .
protected section.
private section.
TYPES: BEGIN OF ty_result,
name TYPe ABPTOKEN-LEXEM,
result TYPE ABAP_BOOL,
end of ty_result.
TYPES: tt_result TYPE STANDARD TABLE OF ty_result WITH KEY name.
class-data: mt_result TYPE tt_result.
ENDCLASS.
CLASS ZCL_CDS_VIEW_CASE_TOOL IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_CDS_VIEW_CASE_TOOL=>IS_CDS_VIEW
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_NAME TYPE ABPTOKEN-LEXEM
* | [<-()] RV_RESULT TYPE ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IS_CDS_VIEW.
CHECK sy-uname = 'WANGJER'.
READ TABLE mt_result ASSIGNING FIELD-SYMBOL(<result>) WITH KEY name = iv_name.
IF sy-subrc = 0.
rv_result = <result>-result.
RETURN.
ENDIF.
SELECT single obj_name INTO @data(ls) FROM TADIR
WHERE pgmid = 'R3TR' and object = 'DDLS' and obj_name = @iv_name.
data(ls_result) = value ty_result( name = iv_name result = boolc( sy-subrc = 0 ) ).
APPEND ls_result to mt_result.
rv_result = ls_result-result.
endmethod.
ENDCLASS.
No comments:
Post a Comment