Domain Fixed Values as CDS Value Help but not S/4HANA

Attention this article is not for S/4HANA, which already delivers standard CDS View I_DomainFixedValue for exposing domain fixed values. Use this approach in lower NetWeaver releases in non S/4HANA systems.

“Fiori Elements” is a great opportunity for rapid application development for simple scenarios. In lot of cases ABAP developers maintain domain fixed values to have a drop-down list automatically generated by one of the UI technologies like GUI and WebDynpro. Domain fixed value often represent a Status or something like that, where we can say the values are static. In case of OData services and UI5 such control is not generated automatically, but you need to put annotations in your CDS View to make this working. With the below snippets we’ll use CDS Views, to retrive domain low fixed values and their description. The approach below is not the only one, which can lead to the same result. At the end the Object Page template in Fiori Elements ( or your app importing annotation file) will consider the annotations and display a proper value help.

Step 1 – Create a basic CDS View to retrieve domain fixed values (low) and their texts

This view can be reused as basis. Do it once, and use it in every Modeled Value Help View created for your domains. Create a new CDS data definition ZCDS_DOMAIN_FIX_LOW in eclipse, and include the below snippet.

@AbapCatalog.sqlViewName: 'ZV_DOMFIXL'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@Search.searchable: true
@EndUserText.label: 'Domain fixed value help'
define view Zcds_Domain_Fix_Low
  as select from    dd07l as FixedValue
    left outer join dd07t as ValueText on  FixedValue.domname    = ValueText.domname
                                       and FixedValue.domvalue_l = ValueText.domvalue_l
                                       and FixedValue.as4local   = ValueText.as4local

{
      @UI.hidden
  key FixedValue.domname    as DomainName,
      @UI.hidden
  key FixedValue.as4local   as Status,
      @Search.defaultSearchElement: true
      @Search.fuzzinessThreshold: 0.8
  key FixedValue.domvalue_l as Low,
      @Semantics.text: true -- identifies the text field
      ValueText.ddtext      as Text
}

where
      FixedValue.as4local  = 'A' --Active
  and ValueText.ddlanguage = $session.system_language 

Step 2 – Create a Modeled Value Help View for the domain

At the end in the WHERE clause, put your domain name. You can customize the text to override the standard label. 

@AbapCatalog.sqlViewName: 'ZV_MYDOMAIN_VH'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'My Value Help'
@Search.searchable: true
define view Zcds_My_Domain_Vh
  as select from Zcds_Domain_Fix_Low
{
      @UI.hidden
  key Zcds_Domain_Fix_Low.DomainName,
      @EndUserText.label: 'Status' -- Custom label text
  key Zcds_Domain_Fix_Low.Low,
      @Semantics.text: true            -- identifies the text field
      @Search.defaultSearchElement: true
      @Search.fuzzinessThreshold: 0.8
      Zcds_Domain_Fix_Low.Text
}

where
  Zcds_Domain_Fix_Low.DomainName = 'ZYOURDOMAINNAME' 

Step 3 – Refer the Value Help in your Consumption View

In the CDS View exposed as OData service, where you want to use the value help, associate the Modeled Value Help View, and annotate the field based on the domain.

association [0..1] to Zcds_My_Domain_Vh as _MyValueHelp on $projection.Area = _MyValueHelp.Low
...

 @UI.selectionField.position: 30
 @Consumption.valueHelp: '_MyValueHelp'
 key YourEntity.YourField,
...

The CDS as solution is also available in non S4/HANA releaes, you can find it in the good old ECC or ERP, and can have a goog play with data modelling having NW 7.50 for example, of course with lot of restrictions. CDS Value help solution in non-S/4HANA systems.