P_ContactCardType

DDL: P_CONTACTCARDTYPE SQL: PCONTACTCARDTYPE Type: view COMPOSITE

P_ContactCardType is a Composite CDS View in SAP S/4HANA. It reads from 1 data source (I_BusinessPartner) and exposes 19 fields with key fields ContactCardSemanticObjectType, ContactCardSemanticObjectID.

Data Sources (1)

SourceAliasJoin Type
I_BusinessPartner _BusinessPartner from

Annotations (8)

NameValueLevelField
AbapCatalog.sqlViewName PCONTACTCARDTYPE view
ClientHandling.algorithm #SESSION_VARIABLE view
AbapCatalog.compiler.compareFilter true view
AccessControl.authorizationCheck #PRIVILEGED_ONLY view
VDM.viewType #COMPOSITE view
VDM.private true view
ObjectModel.usageType.serviceQuality C view
ObjectModel.usageType.sizeCategory #S view

Fields (19)

KeyFieldSource TableSource FieldDescription
KEY ContactCardSemanticObjectType
KEY ContactCardSemanticObjectID
ContactCardType
ContactCardID
ContactCardRole
ContactCardRoleRank
ContactCardRoleLanguage
ContactCardRoleText
ContactCardNavigationLink
ContactCardCategory
FullName
PhoneNumber
EmailAddress
JobName
ContactCardPictureURL
OrganizationalUnitName
CompanyName
AddressID
FormattedAddress
@AbapCatalog.sqlViewName: 'PCONTACTCARDTYPE'
@ClientHandling.algorithm: #SESSION_VARIABLE
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #PRIVILEGED_ONLY // never expose this view directly, only via associations

@VDM.viewType: #COMPOSITE
@VDM.private: true
@ObjectModel.usageType.serviceQuality: 'C'
@ObjectModel.usageType.sizeCategory: #S
define view P_ContactCardType
  as select from I_BusinessPartner as _BusinessPartner
{
      // the structure consists of four major blocks

      // 0. OData key of entity

      // 1. contact selection criterias

      // 2. role information

      // 3. contact attributes for display and navigation

      // conceptually one would put 1 first, however the selection criteria is not relevant to the UI.

      // OData and UI need a unique key that (is supposed to) allow obtaining more data. Thus this goes first.

      // therefore we put role first, and reuse ContactCardRoleRank to number all contacts sequentially

      // 0

      @UI.hidden: true
  key cast ('Dummy' as contactcardsemanticobjecttype) as ContactCardSemanticObjectType,

      //     @UI.identification: { type: #WITH_URL, url: 'ContactCardNavigationLink' }

      @UI.hidden: true
      @Consumption.semanticObject: 'Employee'
      @ObjectModel.text.element: 'FullName'
      @UI.identification.semanticObjectAction: 'displayFactSheet'
      @UI.identification.type: #WITH_INTENT_BASED_NAVIGATION

  key cast ('' as contactcardsemanticobjectid)        as ContactCardSemanticObjectID,
      // 1 & 2

      @Consumption.hidden: true
      cast ('Dummy' as contactcardtype)               as ContactCardType,
      @Consumption.hidden: true
      cast ('' as contactcardid)                      as ContactCardID,
      @Consumption.hidden: true
      cast ('' as contactcardrole)                    as ContactCardRole,
      @UI.hidden: true
      cast (1000 as contactcardrolerank)              as ContactCardRoleRank,
      @UI.hidden: true
      @Semantics.language
      cast ('E' as abap.lang)                         as ContactCardRoleLanguage,
      @Semantics.text
      @Semantics.organization.role: true
      cast ('' as contactcardroletext)                as ContactCardRoleText,
      // 3

      // @UI.hidden: true

      cast ('' as contactcardnavigationlink)          as ContactCardNavigationLink,
      // @UI.hidden: true

      @Semantics.contact.kind
      cast ('' as contactcardcategory)                as ContactCardCategory,
      @Semantics.name.fullName
      cast ('' as contactcardfullname)                as FullName, // DisplayName

      @Semantics.telephone.type: [ #WORK ]
      cast ('' as contactcardphonenumber)             as PhoneNumber,
      //    @Semantics.telephone.type: [ #CELL ]

      //    cast ('' as CONTACTCARDMOBILEPHONENUMBER) as MobilePhoneNumber,

      //    @Semantics.telephone.type: [ #FAX ]

      //    cast ('' as CONTACTCARDFAXNUMBER) as FaxNumber,

      @Semantics.eMail.address
      cast ('' as contactcardemailaddress)            as EmailAddress,
      @Semantics.name.jobTitle
      cast ('' as contactcardjobname)                 as JobName,
      @Semantics.contact.photo
      cast ('' as contactcardpictureurl)              as ContactCardPictureURL,
      @Semantics.organization.unit
      cast ('' as contactcardorgunitname)             as OrganizationalUnitName,
      //    @Semantics.url

      //    cast ('' as CONTACTCARDWEBSITEURL) as WebsiteURL,

      @Semantics.organization.name
      cast ('' as contactcardcompanyname)             as CompanyName,
      cast ('' as ad_addrnum)                         as AddressID,
      @Semantics.address.label
      cast ('' as contactcardformattedaddress)        as FormattedAddress
}
where
  _BusinessPartner.CreationDate > '99999999' // impossible

/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_BUSINESSPARTNER"
],
"ASSOCIATED":
[],
"BASE":
[],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/