C_ChangeDocuments

DDL: C_CHANGEDOCUMENTS SQL: CBCCHANGEDOC Type: view CONSUMPTION

CDS View für Änderungsbelege

C_ChangeDocuments is a Consumption CDS View that provides data about "CDS View für Änderungsbelege" in SAP S/4HANA. It reads from 1 data source (I_ChangeDocument) and exposes 34 fields with key fields ChangeDocObjectClass, ChangeDocObjectClassDisplay, ChangeDocObjectClassTr, ChangeDocObject, ChangeDocObjectDisplay. It has 5 associations to related views.

Data Sources (1)

SourceAliasJoin Type
I_ChangeDocument _header from

Associations (5)

CardinalityTargetAliasCondition
[0..1] I_LanguageText _langu _langu.Language = $session.system_language and _langu.LanguageCode = ChangeDocLanguage
[0..1] I_ChangeDocUser _user $projection.CreatedByUser = _user.UserName
[0..1] I_ChangeDocChangeIndT _changetype_text $projection.ChangeDocChangeType = _changetype_text.Value and _changetype_text.Language = $session.system_language
[0..1] I_ChangeDocFieldNamesT _fieldname_text _fieldname_text.DatabaseTable = $projection.DatabaseTable and _fieldname_text.Value = $projection.ChangeDocDatabaseTableField and _fieldname_text.Language = $session.system_language
[0..1] I_ChangeDocTableNames _tablename_text $projection.DatabaseTable = _tablename_text.Value and _tablename_text.Language = $session.system_language

Annotations (7)

NameValueLevelField
AbapCatalog.sqlViewName CBCCHANGEDOC view
AbapCatalog.compiler.compareFilter true view
EndUserText.label CDS View für Änderungsbelege view
ClientHandling.algorithm #SESSION_VARIABLE view
AccessControl.authorizationCheck #NOT_REQUIRED view
VDM.viewType #CONSUMPTION view
Metadata.allowExtensions true view

Fields (34)

KeyFieldSource TableSource FieldDescription
KEY ChangeDocObjectClass I_ChangeDocument ChangeDocObjectClass Objekt
KEY ChangeDocObjectClassDisplay I_ChangeDocument ChangeDocObjectClass Objekt
KEY ChangeDocObjectClassTr I_ChangeDocument ChangeDocObjectClass
KEY ChangeDocObject I_ChangeDocument ChangeDocObject Objektwert
KEY ChangeDocObjectDisplay I_ChangeDocument ChangeDocObject Objektwert
KEY ChangeDocObjectTr I_ChangeDocument ChangeDocObject
KEY ChangeDocument I_ChangeDocument ChangeDocument Änderungsbelegnummer
KEY DatabaseTable _ChangeDocumentItem DatabaseTable
KEY DatabaseTableTr _ChangeDocumentItem DatabaseTable
KEY ChangeDocTableKeyendasChangeDocTableKey Tabellenschlüssel
KEY ChangeDocTableKeyendasChangeDocTableKeyT
KEY ChangeDocDatabaseTableField _ChangeDocumentItem ChangeDocDatabaseTableField
KEY ChangeDocDatabaseTableFieldTr _ChangeDocumentItem ChangeDocDatabaseTableField
KEY ChangeDocChangeType Änderungsart
ChangeDocDatabaseTableFieldT _ChangeDocumentItem ChangeDocDatabaseTableField
DatabaseTableT _ChangeDocumentItem DatabaseTable
CreatedByUser I_ChangeDocument CreatedByUser
CreatedByUserendasNAME_TEXTC Geändert von
CreationDate I_ChangeDocument CreationDate
CreationTime I_ChangeDocument CreationTime
clientNULLascdcreatedasCreatedOn
ChangeDocLanguageKey
ChangeDocLanguage _langu LanguageName Sprache
ChangeTransactionCode I_ChangeDocument ChangeTransactionCode Transaktion
ChangeDocObjectDescription Objektbeschreibung
ChangeDocumentStringNew Neuer erweiterter Wert (lang)
ChangeDocumentStringOld Alter erweiterter Wert (lang)
ChangeDocNewShortString Neuer erweiterter Wert (kurz)
ChangeDocOldShortString Alter erweiterter Wert (kurz)
ChangeDocNewRawString Neuer Rohdatenwert
ChangeDocOldRawString Alter Rohdatenwert
_ChangeDocumentItem _ChangeDocumentItem
_user _user
Language
@AbapCatalog.sqlViewName: 'CBCCHANGEDOC'
@AbapCatalog.compiler.compareFilter: true
@EndUserText.label: 'CDS View für Änderungsbelege'
@ClientHandling.algorithm: #SESSION_VARIABLE
@AccessControl.authorizationCheck: #NOT_REQUIRED
//@Analytics.dataCategory: #DIMENSION

//@Analytics.dataExtraction.enabled: true

@VDM.viewType: #CONSUMPTION

@Metadata.allowExtensions: true

define view C_ChangeDocuments as select from I_ChangeDocument as _header                                                 
  
  association [0..1] to I_LanguageText as  _langu 
                     on  _langu.Language     = $session.system_language
                     and _langu.LanguageCode = ChangeDocLanguage                                                                                      
                                                 
  association [0..1] to I_ChangeDocUser as _user 
                     on $projection.CreatedByUser = _user.UserName                   
                     
  association [0..1] to I_ChangeDocChangeIndT as _changetype_text 
                     on $projection.ChangeDocChangeType = _changetype_text.Value
                     and _changetype_text.Language      = $session.system_language       

  association [0..1] to I_ChangeDocFieldNamesT as _fieldname_text 
                     on  _fieldname_text.DatabaseTable = $projection.DatabaseTable
                     and _fieldname_text.Value         = $projection.ChangeDocDatabaseTableField 
                     and _fieldname_text.Language      = $session.system_language                                                                                                          
  
                                                        
  association [0..1] to I_ChangeDocTableNames as _tablename_text 
                     on   $projection.DatabaseTable = _tablename_text.Value
                     and _tablename_text.Language   = $session.system_language                                                           
                                                                                                                                       
{
    @EndUserText.label: 'Objekt'
//    @UI.selectionField: [{ position: 1  }]

    @ObjectModel.filter.transformedBy: 'ABAP:CL_RSSCD_TRANSFORM'
    @UI.hidden: true   
    key _header.ChangeDocObjectClass as ChangeDocObjectClass,

//  additional field for filter on ObjectClass

    @EndUserText.label: 'Objekt'
    @UI.selectionField: [{ position: 1  }]
    key _header.ChangeDocObjectClass as ChangeDocObjectClassDisplay,
    
//  ObjectClass additional field for internal filtering with replaced texts

    @UI.hidden: true   
    key _header.ChangeDocObjectClass as ChangeDocObjectClassTr,

    @EndUserText.label: 'Objektwert'
    @UI.hidden: true   
//    @UI.selectionField: [{ position: 2  }]

    @ObjectModel.filter.transformedBy: 'ABAP:CL_RSSCD_TRANSFORM'
    key _header.ChangeDocObject as ChangeDocObject,
 
 // ChangeDocObject additional field for filter

    @EndUserText.label: 'Objektwert'
    @UI.selectionField: [{ position: 2  }]
    key _header.ChangeDocObject as ChangeDocObjectDisplay,
    
//  ChangeDocObject additional field for internal filtering with replaced texts

    @UI.hidden: true   
    key _header.ChangeDocObject as ChangeDocObjectTr,

//  ChangeDocument    

    @EndUserText.label: 'Änderungsbelegnummer'
    @UI.identification.position: 30
    key _header.ChangeDocument as ChangeDocument,

//  table name internal field    

    @UI.textArrangement: #TEXT_ONLY
//  text association is necessary to keep field _tablename_text in CDS View

//  even though it is not used to display the table texts anymore

    @ObjectModel.text.association: '_tablename_text'
//    @EndUserText.label: 'Tabelle'          

//    @ObjectModel.filter.transformedBy: 'ABAP:CL_RSSCD_TRANSFORM'

    @UI.hidden: true   
    key _ChangeDocumentItem.DatabaseTable as DatabaseTable,  

//  table name get texts directly from _ChangeDocumentItem        

//  @EndUserText.label: 'Tabelle'       

//  Transformation only necessary if texts get replaced in Badi and method modify_filter is used

    @ObjectModel.filter.transformedBy: 'ABAP:CL_RSSCD_TRANSFORM'
    key case
      when _ChangeDocumentItem._TableTextDDIC.Text is not initial
        then 
          cast( _ChangeDocumentItem._TableTextDDIC.Text as cdtabnametxt )
        else
          cast( _ChangeDocumentItem._TableTextView.Text as cdtabnametxt )
    end as ChangeDocDatabaseTableTxt,

//  table name additional field for internal filtering with replaced texts    

    @UI.hidden: true  
    key _ChangeDocumentItem.DatabaseTable as DatabaseTableTr,  

//  tabkey       

    @EndUserText.label: 'Tabellenschlüssel'
    key
      case
        when _ChangeDocumentItem._ChangeDocLongTableKey.ChangeDocLongTableKey is not initial 
          then 
            _ChangeDocumentItem.ChangeDocTableKey 
        when _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocTabkeyLength < 71 
          then 
//          for string fields take short key from CDPOS_STR

            coalesce( _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocTableKey,
                      _ChangeDocumentItem.ChangeDocTableKey )
        else
          _ChangeDocumentItem.ChangeDocTableKey 
      end as ChangeDocTableKey,
    
//  tabkey additional field for internal filtering       

    @UI.hidden: true  
     key
      case
        when _ChangeDocumentItem._ChangeDocLongTableKey.ChangeDocLongTableKey is not initial 
          then 
            _ChangeDocumentItem.ChangeDocTableKey 
        when _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocTabkeyLength < 71 
          then 
//          for string fields take short key from CDPOS_STR

            coalesce( _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocTableKey,
                      _ChangeDocumentItem.ChangeDocTableKey )
        else
          _ChangeDocumentItem.ChangeDocTableKey 
      end as ChangeDocTableKeyT,
    
//  tabkey additional field for internal filtering with replaced texts       

    @UI.hidden: true  
     key
      case
        when _ChangeDocumentItem._ChangeDocLongTableKey.ChangeDocLongTableKey is not initial 
          then 
            _ChangeDocumentItem.ChangeDocTableKey 
        when _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocTabkeyLength < 71 
          then 
//          for string fields take short key from CDPOS_STR

            coalesce( _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocTableKey,
                      _ChangeDocumentItem.ChangeDocTableKey )
        else
          _ChangeDocumentItem.ChangeDocTableKey 
      end as ChangeDocTableKeyTr,
    
//  field name internal field           

//    @UI.lineItem.position: 10

//  text association is necessary to keep field _fieldname_text in CDS View

//  even though it is not used to display the field texts anymore

    @UI.textArrangement: #TEXT_ONLY
    @ObjectModel.text.association: '_fieldname_text'
//    @ObjectModel.sort.enabled: false               

//    @EndUserText.label: 'Feldname'       

//    @ObjectModel.filter.transformedBy: 'ABAP:CL_RSSCD_TRANSFORM'

//    @ObjectModel.sort.transformedBy: 'ABAP:CL_RSSCD_TRANSFORM'

    @UI.hidden: true  
    key _ChangeDocumentItem.ChangeDocDatabaseTableField  
        as ChangeDocDatabaseTableField,

//  field name as text

    @UI.lineItem.position: 10
//  Transformation only necessary if texts get replaced in Badi and method modify_filter is used

    @ObjectModel.filter.transformedBy: 'ABAP:CL_RSSCD_TRANSFORM'
//  Get texts directly from _ChangeDocumentItem  

    key case
      when _ChangeDocumentItem._FieldTextReplace.Text is not initial
        then 
          cast( _ChangeDocumentItem._FieldTextReplace.Text as cdfieldnametxt)
      when _ChangeDocumentItem._FieldTextLabel.Text is not initial
        then 
          cast( _ChangeDocumentItem._FieldTextLabel.Text as cdfieldnametxt )
      when _ChangeDocumentItem._FieldTextView.Text is not initial
        then
          cast( _ChangeDocumentItem._FieldTextView.Text as cdfieldnametxt )
      when _ChangeDocumentItem._FieldTextDDIC.Text is not initial
        then
          cast( _ChangeDocumentItem._FieldTextDDIC.Text as cdfieldnametxt )
      when _ChangeDocumentItem.ChangeDocDatabaseTableField <> 'KEY'
        then
          cast( _ChangeDocumentItem.ChangeDocDatabaseTableField as cdfieldnametxt )
      else
          cast( ' ' as cdfieldnametxt )
    end as ChangeDocDatabaseTableFieldTxt,
       
//  field name additional field for internal filtering with replaced texts          

    @UI.hidden: true  
    key _ChangeDocumentItem.ChangeDocDatabaseTableField  
        as ChangeDocDatabaseTableFieldTr,

//  change indicator    

    @EndUserText.label: 'Änderungsart'  
    @UI.lineItem.position: 70
    @UI.textArrangement: #TEXT_ONLY
    @ObjectModel.text.association: '_changetype_text'
    @Consumption.valueHelpDefinition: [{entity:{name:    'I_ChangeDocChangeInd',
                                                element: 'Value' }}] 
    @Consumption.filter.multipleSelections: true                                             
    key cast( _ChangeDocumentItem.ChangeDocItemChangeType as cdchngind )
              as ChangeDocChangeType,
              
//  field name additional field for internal filtering

//  do not delete: needed for compatibility reasons (no longer defined as key field)          

    @UI.hidden: true  
    _ChangeDocumentItem.ChangeDocDatabaseTableField  
      as ChangeDocDatabaseTableFieldT,

//  table name additional field for internal filtering    

//  do not delete: needed for compatibility reasons (no longer defined as key field)          

    @UI.hidden: true  
     _ChangeDocumentItem.DatabaseTable as DatabaseTableT,  

//      create by user - technical name 

        @UI.hidden: true   
        _header.CreatedByUser as CreatedByUser,   
        
//      created by user - full name

        @Semantics.user.id: true
        @UI.textArrangement: #TEXT_ONLY
        @EndUserText.label: 'Geändert von' 
        @EndUserText.quickInfo: 'Geändert von'
        @UI.lineItem.position: 45
//      use technical user name if no text exists to enable filtering and sorting

//      it will be replaced by pseudonomization in reuse service before display

        case
          when _user.NAME_TEXTC is not initial
            then _user.NAME_TEXTC 
          else _header.CreatedByUser
        end as NAME_TEXTC,
  
//      Creation Date/ Time - technical name 

        @UI.hidden: true   
        _header.CreationDate as CreationDate,
        @UI.hidden: true   
        _header.CreationTime as CreationTime,                                   

//      created on

        @UI.lineItem.position: 50
        cast(dats_tims_to_tstmp ( _header.CreationDate, 
                                  _header.CreationTime, 
                                  abap_system_timezone( $session.client,  'NULL' ),
                                  $session.client, 
                                  'NULL' ) as cdcreated ) as CreatedOn,                         

//      language in CDHDR 

        @UI.hidden: true   
        _header._ChangeDocLanguage.Language as ChangeDocLanguageKey,               
        @EndUserText.label: 'Sprache'
        _langu.LanguageName  as ChangeDocLanguage,        
                 
//      transaction                 

        @EndUserText.label: 'Transaktion'
        @UI.hidden: true
        _header.ChangeTransactionCode as ChangeTransactionCode,
         
//      long tabkey    

        @EndUserText.label: 'Langer Tabellenschlüssel'
//        @UI.hidden: true

        case
          when _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocTabkeyLength > 70
            then 
//             for string fields take long key from CDPOS_STR

              _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocTableKey
          else
            _ChangeDocumentItem._ChangeDocLongTableKey.ChangeDocLongTableKey 
        end as ChangeDocTableKeyLong,

//      long tabkey additional field for internal filtering with replaced texts   

        @UI.hidden: true
        case
          when _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocTabkeyLength > 70
            then 
//             for string fields take long key from CDPOS_STR

              _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocTableKey
          else
            _ChangeDocumentItem._ChangeDocLongTableKey.ChangeDocLongTableKey 
        end as ChangeDocTableKeyLongTr,

//    new value

      @UI.lineItem.position: 20  
//      @Consumption.filter.hidden: true

      @EndUserText.label: 'Neuer Wert' 
      @ObjectModel.sort.enabled: false        
      case
        when _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocShortStringNew is not initial
          then 
            _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocShortStringNew
        when _ChangeDocumentItem.ChangeDocNewFieldValue is not initial or 
             _ChangeDocumentItem.ChangeDocNewCurrency   is not initial or
             _ChangeDocumentItem.ChangeDocNewUnit       is not initial
          then 
            cast( concat_with_space(_ChangeDocumentItem.ChangeDocNewFieldValue, 
                  concat(_ChangeDocumentItem.ChangeDocNewCurrency, 
                         _ChangeDocumentItem.ChangeDocNewUnit ), 1 )
                         as cdfldvaln )
        else
            ' ' 
      end as ChangeDocNewFieldValue,

//    old value    

      @UI.lineItem.position: 30  
//    @Consumption.filter.hidden: true 

      @EndUserText.label: 'Alter Wert'
      @ObjectModel.sort.enabled: false        
      case
        when _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocShortStringOld is not initial
          then 
            _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocShortStringOld
        when _ChangeDocumentItem.ChangeDocPreviousFieldValue is not initial or 
             _ChangeDocumentItem.ChangeDocPreviousCurrency   is not initial or
             _ChangeDocumentItem.ChangeDocPreviousUnit       is not initial
          then 
            cast( concat_with_space(_ChangeDocumentItem.ChangeDocPreviousFieldValue, 
                  concat(_ChangeDocumentItem.ChangeDocPreviousCurrency, 
                         _ChangeDocumentItem.ChangeDocPreviousUnit ), 1 )
                         as cdfldvaln )
        else
            ' ' 
      end as ChangeDocPreviousFieldValue,       
 
//    object description           

      @UI.textArrangement: #TEXT_ONLY
      @EndUserText.label: 'Objektbeschreibung'
      cast('' as cdobjecttxt) as ChangeDocObjectDescription,                        

//    string new

//      @Consumption.filter.hidden: true

      @EndUserText.label: 'Neuer erweiterter Wert (lang)'
      _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocStringNew as ChangeDocumentStringNew,
     
//    string old 

//      @Consumption.filter.hidden: true

      @EndUserText.label: 'Alter erweiterter Wert (lang)'
      _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocStringOld as ChangeDocumentStringOld,
       
//    short string new    

//      @Consumption.filter.hidden: true

      @EndUserText.label: 'Neuer erweiterter Wert (kurz)'        
      @UI.hidden: true        
      _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocShortStringNew 
                        as ChangeDocNewShortString,

//    short string old            

//      @Consumption.filter.hidden: true

      @EndUserText.label: 'Alter erweiterter Wert (kurz)'
      @UI.hidden: true        
      _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocShortStringOld 
                        as ChangeDocOldShortString,                         

//    raw string new            

//      @Consumption.filter.hidden: true

      @EndUserText.label: 'Neuer Rohdatenwert'  
      @EndUserText.quickInfo: 'Neuer Rohdatenwert'  
      @ObjectModel.sort.enabled: false
//      @UI.hidden: true        

      _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocRawStringNew 
                        as ChangeDocNewRawString,
                        
//    raw string old    

//      @Consumption.filter.hidden: true

      @EndUserText.label: 'Alter  Rohdatenwert'
      @EndUserText.quickInfo: 'Alter  Rohdatenwert'
      @ObjectModel.sort.enabled: false                
//      @UI.hidden: true  

      _ChangeDocumentItem._ChangeDocumentItemExtension.ChangeDocRawStringOld 
                        as ChangeDocOldRawString,                           
 
        _ChangeDocumentItem,
        _user,
        _changetype_text,
        _fieldname_text,
        _tablename_text,
        _header._ChangeDocLanguage.Language
  
        
  }
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_CHANGEDOCFIELDLABEL",
"I_CHANGEDOCFIELDNAMES",
"I_CHANGEDOCFIELDTEXT",
"I_CHANGEDOCLONGTABLEKEY",
"I_CHANGEDOCTABLENAMES",
"I_CHANGEDOCTABLETEXT",
"I_CHANGEDOCUMENT",
"I_CHANGEDOCUMENTITEM",
"I_CHANGEDOCUMENTITEMEXTENSION",
"I_CHANGEDOCUSER",
"I_CHANGEDOCVIEWTEXT",
"I_LANGUAGE",
"I_LANGUAGETEXT"
],
"ASSOCIATED":
[
"I_CHANGEDOCCHANGEINDT",
"I_CHANGEDOCFIELDNAMEST",
"I_CHANGEDOCTABLENAMES",
"I_CHANGEDOCUMENTITEM",
"I_CHANGEDOCUSER",
"I_LANGUAGETEXT"
],
"BASE":
[
"I_CHANGEDOCUMENT"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/