I_ChangeDocument_2

DDL: I_CHANGEDOCUMENT_2 Type: view_entity BASIC Package: SZD

Change Documents

I_ChangeDocument_2 is a Basic CDS View that provides data about "Change Documents" in SAP S/4HANA. It reads from 2 data sources (cdhdr, cdpos) and exposes 34 fields with key fields ChangeDocObjectClass, ChangeDocObject, ChangeDocument, ChangeDocDatabaseTable, ChangeDocShortTableKey. It has 5 associations to related views. Part of development package SZD.

Data Sources (2)

SourceAliasJoin Type
cdhdr cdhdr left_outer
cdpos cdpos from

Associations (5)

CardinalityTargetAliasCondition
[0..1] I_ChangeDocLongTableKey _ChangeDocLongTableKey $projection.ChangeDocShortTableKey = _ChangeDocLongTableKey.ChangeDocKeyGuid
[0..1] I_ChangeDocumentItemExtension _ChangeDocumentItemExtension $projection.ChangeDocShortTableKey = _ChangeDocumentItemExtension.ChangeDocKeyGuid
[0..1] I_Language _ChangeDocLanguage $projection.ChangeDocLanguage = _ChangeDocLanguage.Language
[0..1] I_LanguageText _ChangeDocLanguageText _ChangeDocLanguageText.Language = $session.system_language and _ChangeDocLanguageText.LanguageCode = $projection.ChangeDocLanguage
[0..1] I_ChangeDocUser _user $projection.CreatedByUser = _user.UserName

Annotations (8)

NameValueLevelField
AccessControl.authorizationCheck #PRIVILEGED_ONLY view
EndUserText.label Change Documents view
Metadata.ignorePropagatedAnnotations true view
Metadata.allowExtensions true view
ObjectModel.usageType.serviceQuality #X view
ObjectModel.usageType.sizeCategory #XXL view
ObjectModel.usageType.dataClass #MIXED view
VDM.viewType #BASIC view

Fields (34)

KeyFieldSource TableSource FieldDescription
KEY ChangeDocObjectClass cdpos objectclas
KEY ChangeDocObject cdpos objectid
KEY ChangeDocument cdpos changenr
KEY ChangeDocDatabaseTable cdpos tabname
KEY ChangeDocShortTableKey cdpos tabkey
KEY ChangeDocDatabaseTableField cdpos fname
KEY ChangeDocItemChangeType cdpos chngind
tabkeyendasChangeDocTableKey
CreatedByUser cdhdr username
usernameendasChangeDocCreatedByUser
CreationDate cdhdr udate
CreationTime cdhdr utime
clientNULLascdcreatedasCreationDateTime
ChangeTransactionCode cdhdr tcode
ChangeDocChangeType cdhdr change_ind
ChangeDocLanguage cdhdr langu
ChangeDocPreviousUnit
ChangeDocNewUnit
ChangeDocPreviousCurrency
ChangeDocNewCurrency
ChangeDocNewFieldValueDB cdpos value_new
ChangeDocPreviousFieldValueDB cdpos value_old
ChangeDocNewString _ChangeDocumentItemExtension ChangeDocStringNew
ChangeDocPreviousString _ChangeDocumentItemExtension ChangeDocStringOld
ChangeDocNewShortString _ChangeDocumentItemExtension ChangeDocShortStringNew
ChangeDocPreviousShortString _ChangeDocumentItemExtension ChangeDocShortStringOld
ChangeDocNewRawString _ChangeDocumentItemExtension ChangeDocRawStringNew
ChangeDocPreviousRawString _ChangeDocumentItemExtension ChangeDocRawStringOld
_ChangeTypeText _ChangeTypeText
_ChangeDocLanguage _ChangeDocLanguage
_ChangeDocLanguageText _ChangeDocLanguageText
_user _user
_TableText _TableText
_FieldText _FieldText
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #PRIVILEGED_ONLY
@EndUserText.label: 'Change Documents'
@Metadata.ignorePropagatedAnnotations: true
@Metadata.allowExtensions: true
@ObjectModel.usageType:{
  serviceQuality: #X,
  sizeCategory: #XXL,
  dataClass: #MIXED
}
@VDM.viewType:#BASIC

define root view entity I_ChangeDocument_2 
  as select from cdpos 
  left outer join cdhdr on cdhdr.objectclas = cdpos.objectclas
                           and cdhdr.objectid = cdpos.objectid
                           and cdhdr.changenr = cdpos.changenr
                           
  association [0..1] to I_ChangeDocLongTableKey as _ChangeDocLongTableKey 
                     on $projection.ChangeDocShortTableKey = _ChangeDocLongTableKey.ChangeDocKeyGuid

  association [0..1] to I_ChangeDocumentItemExtension as _ChangeDocumentItemExtension 
                     on $projection.ChangeDocShortTableKey = _ChangeDocumentItemExtension.ChangeDocKeyGuid

  association of one to many I_ChangeDocTableNameText  as _TableText 
                     on  $projection.ChangeDocObjectClass = _TableText.ChangeDocObject 
                     and $projection.ChangeDocDatabaseTable = _TableText.Tablename 

  association of one to many I_ChangeDocFieldNameText  as _FieldText 
                     on  $projection.ChangeDocObjectClass = _FieldText.ChangeDocObject 
                     and $projection.ChangeDocDatabaseTable = _FieldText.Tablename  
                     and $projection.ChangeDocDatabaseTableField = _FieldText.Fieldname

  association of one to many I_ChangeDocChangeIndT as _ChangeTypeText 
                     on  $projection.ChangeDocItemChangeType = _ChangeTypeText.Value

  association [0..1] to I_Language as _ChangeDocLanguage  
                     on  $projection.ChangeDocLanguage = _ChangeDocLanguage.Language
                     
  association [0..1] to I_LanguageText as  _ChangeDocLanguageText 
                     on  _ChangeDocLanguageText.Language     = $session.system_language
                     and _ChangeDocLanguageText.LanguageCode = $projection.ChangeDocLanguage                                                                                      

  association [0..1] to I_ChangeDocUser as _user 
                     on $projection.CreatedByUser = _user.UserName                   
                           
{

  key cdpos.objectclas as ChangeDocObjectClass,
  key cdpos.objectid   as ChangeDocObject,

  key cdpos.changenr      as ChangeDocument,
  key cdpos.tabname       as ChangeDocDatabaseTable,
  
  key cdpos.tabkey        as ChangeDocShortTableKey,



  key cdpos.fname         as ChangeDocDatabaseTableField,
  key cdpos.chngind       as ChangeDocItemChangeType,

// merge tabkeyshort or tabkeylong into tabkeylong  

      case
        when _ChangeDocumentItemExtension.ChangeDocTableKey is not initial   // string field

          then 
            _ChangeDocumentItemExtension.ChangeDocTableKey                   // string field -> tabkey from CDPOS_STR

        when _ChangeDocLongTableKey.ChangeDocLongTableKey is not initial    // long tabkey, no string field  

          then
            _ChangeDocLongTableKey.ChangeDocLongTableKey                     // no string field -> long tabkey from CDPOS_UID

        else
            cdpos.tabkey                                                     // short tabkey from CDPOS

      end as ChangeDocTableKey,

      cdhdr.username   as CreatedByUser,
// username -> Text

      case
        when _user.NAME_TEXTC is not initial
          then _user.NAME_TEXTC 
        else cdhdr.username
      end as ChangeDocCreatedByUser,
      
      @Semantics.systemDate.createdAt: true
      cdhdr.udate      as CreationDate,
      @Semantics.systemTime.createdAt: true
      cdhdr.utime      as CreationTime,

// Created on

      cast(dats_tims_to_tstmp ( cdhdr.udate, 
                                cdhdr.utime, 
                                abap_system_timezone( $session.client,  'NULL' ),
                                $session.client, 
                                'NULL' ) as cdcreated ) as CreationDateTime,                         
  
      cdhdr.tcode      as ChangeTransactionCode,
      cdhdr.change_ind as ChangeDocChangeType,
      @Semantics.language: true
      @ObjectModel.foreignKey.association: '_ChangeDocLanguage'
      cdhdr.langu      as ChangeDocLanguage,
  
      cast ( cdpos.unit_old as cdunito preserving type ) as ChangeDocPreviousUnit,
      cast ( cdpos.unit_new as cdunitn preserving type ) as ChangeDocNewUnit,
      cast ( cdpos.cuky_old as cdcukyo preserving type ) as ChangeDocPreviousCurrency,
      cast ( cdpos.cuky_new as cdcukyn preserving type ) as ChangeDocNewCurrency,

      cdpos.value_new     as ChangeDocNewFieldValueDB,
      case
        when cdpos.value_new is not initial or 
             cdpos.unit_new  is not initial or
             cdpos.cuky_new  is not initial
          then 
            cast( concat_with_space( cdpos.value_new, 
                  concat(cdpos.cuky_new, 
                         cdpos.unit_new ), 1 )
                         as cdfldvaln )
        else ' '
      end as ChangeDocNewFieldValue,

      cdpos.value_old     as ChangeDocPreviousFieldValueDB,
      case
        when cdpos.value_old is not initial or 
             cdpos.cuky_old   is not initial or
             cdpos.unit_old       is not initial
          then 
            cast( concat_with_space(cdpos.value_old, 
                  concat(cdpos.cuky_old, 
                         cdpos.unit_old ), 1 )
                         as cdfldvaln )
        else ' '
      end as ChangeDocPreviousFieldValue,

//  Text case

      case 
        when cdpos.text_case = 'X'
          then cdpos.text_case
        else cast ( ' ' as cdxfeld preserving type )
      end as ChangeDocTextIsChanged,

// string values

      _ChangeDocumentItemExtension.ChangeDocStringNew as ChangeDocNewString,
      _ChangeDocumentItemExtension.ChangeDocStringOld as ChangeDocPreviousString,
      _ChangeDocumentItemExtension.ChangeDocShortStringNew as ChangeDocNewShortString,
      _ChangeDocumentItemExtension.ChangeDocShortStringOld as ChangeDocPreviousShortString,
      _ChangeDocumentItemExtension.ChangeDocRawStringNew as ChangeDocNewRawString,
      _ChangeDocumentItemExtension.ChangeDocRawStringOld as ChangeDocPreviousRawString,
         
      _ChangeTypeText,
      _ChangeDocLanguage,
      _ChangeDocLanguageText,
      _user,
      _TableText,
      _FieldText
}