zoukankan      html  css  js  c++  java
  • SAP Fiori Elements里Drop down list的实现原理

    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.

    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:

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

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

    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:

    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:

    Final result

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


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

  • 相关阅读:
    Oracle 12c中文乱码,修改字符集的方法
    C++设计模式——简单工厂模式与策略模式比较
    C++设计模式——工厂模式Factory Method
    JavaWeb——Servlet基础
    C++设计模式——装饰模式Bridge-Pattern
    线性代数思维导图(2)——矩阵
    线性代数思维导图(1)——行列式
    C++设计模式——适配器模式Bridge-Pattern
    C++设计模式——桥接模式Bridge-Pattern
    不想写博客?那试试日记吧!
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/13613342.html
Copyright © 2011-2022 走看看