欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SAP Fiori Elements里Drop down list的实现原理 SAPCloudCDS viewSAP云平台SAP Cloud Platform 

程序员文章站 2022-06-13 17:26:57
...

In the blog Step by Step to create CDS view through SmartTemplate + WebIDE and Create a CRM Service Order Fiori application within a couple of minutes we get an Fiori application generated which needs several fine-tuning on appearance. For example, the status field is by default rendered as a pure input field with technical status code like “OPEN”, “PROC” displayed. It is better to render it as a drop down list with human readable text like “Open”, “In process” displayed as drop down list item.

 

SAP Fiori Elements里Drop down list的实现原理
            
    
    
        SAPCloudCDS viewSAP云平台SAP Cloud Platform 

 

I searched in SCN and could not find a working solution for it, so I spent some time for research and would like to share with you here.

Step1 Create a simple CDS view to hold status code and status description

@AbapCatalog.sqlViewName: 'zstatusfixed'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'fixed value'
define view Z_C_Status_Fixedvalue as select from zstatus_fixedval {
   @EndUserText.label: 'status key for fixed value'
   key zstatus_fixedval.status_code,
   @EndUserText.label: 'status description for fixed value'
   zstatus_fixedval.status_text
}

Previewed as below:

 

SAP Fiori Elements里Drop down list的实现原理
            
    
    
        SAPCloudCDS viewSAP云平台SAP Cloud Platform 

 

Here below is the table definition on top of which the CDS view above is created.

 

SAP Fiori Elements里Drop down list的实现原理
            
    
    
        SAPCloudCDS viewSAP云平台SAP Cloud Platform 

 

For demonstration purpose I create a Z table and only inserted three status items:

 

SAP Fiori Elements里Drop down list的实现原理
            
    
    
        SAPCloudCDS viewSAP云平台SAP Cloud Platform 

 

Step2 link the status field to the CDS view created in previous step

I have defined the consumption view Z_C_Service_Order_View with below source code:

define view Z_C_Service_Order_View as select from Z_i_Order_View
...
@UI.identification: [ { position: 50 } ]
@Consumption.valueHelp: '_statusfixedvalue'
@ObjectModel: { foreignKey.association: '_statusfixedvalue', mandatory: true }
Z_i_Order_View.txt04,

Where does the definition of “_statusfixedvalue” come from? It is defined in view Z_i_Over_View:

define view Z_i_Over_View as select from XXXX
association [0..1] to Z_C_Status_Fixedvalue as _statusfixedvalue
  on  $projection.txt04 = _statusfixedvalue.status_code
{
   ...
   _status_text.txt04,
  ...
   @ObjectModel.association.type: #TO_COMPOSITION_CHILD
   _statusfixedvalue
}

So far the work on CDS side is done.

Step3 create necessary annotation in ABAP code

Prerequisite: you should first create a project using tcode SEGW and then include your CDS consumption view via the context menu as below:

 

SAP Fiori Elements里Drop down list的实现原理
            
    
    
        SAPCloudCDS viewSAP云平台SAP Cloud Platform 

 

Redefine method DEFINE of your MPC_EXT class with following source code:

super->define( ).
    DATA lo_annotation TYPE REF TO /iwbep/if_mgw_odata_annotation.
    DATA  lo_property TYPE REF TO /iwbep/if_mgw_odata_property.
    DATA  lo_entity_set TYPE REF TO /iwbep/if_mgw_odata_entity_set.
    lo_entity_set = model->get_entity_set( 'Z_C_Service_Order_View' ).
    lo_annotation = lo_entity_set->create_annotation( 'sap' ).
    lo_annotation->add( iv_key = 'semantics' iv_value = 'fixed-values').
    DATA(lo_entitytype) = model->get_entity_type( 'Z_C_Service_Order_ViewType' ).
    lo_entitytype->set_is_value_list( abap_true ).
    data(lo_txt_property) = model->get_entity_type( 'Z_C_Service_Order_ViewType' )->get_property( 'txt04' ).
    lo_txt_property->set_value_list( /iwbep/if_mgw_odata_property=>gcs_value_list_type_property-fixed_values ).
    data(lo_text_anno) = lo_txt_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' ).
    lo_text_anno->add( iv_key = 'text' iv_value = 'to_statusfixedvalue/status_text').
    lo_txt_property = model->get_entity_type( 'Z_C_Status_FixedvalueType' )->get_property( 'status_code' ).
    lo_txt_property->set_value_list( /iwbep/if_mgw_odata_property=>gcs_value_list_type_property-fixed_values ).
    lo_text_anno = lo_txt_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' ).
    lo_text_anno->add( iv_key = 'text' iv_value = 'status_text').

Note: those ABAP code is necessary, or else you will only get an ugly drop down list: only status code is displayed:

 

SAP Fiori Elements里Drop down list的实现原理
            
    
    
        SAPCloudCDS viewSAP云平台SAP Cloud Platform 

 

Final result

In display mode and in edit mode, the status description is displayed:

 

SAP Fiori Elements里Drop down list的实现原理
            
    
    
        SAPCloudCDS viewSAP云平台SAP Cloud Platform SAP Fiori Elements里Drop down list的实现原理
            
    
    
        SAPCloudCDS viewSAP云平台SAP Cloud Platform 

 

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

SAP Fiori Elements里Drop down list的实现原理
            
    
    
        SAPCloudCDS viewSAP云平台SAP Cloud Platform