@AbapCatalog.sqlViewName: 'IPPMPROJOBJLINK'
@AbapCatalog.compiler.compareFilter: true
@ClientHandling.algorithm: #SESSION_VARIABLE
@VDM.viewType: #COMPOSITE
@ObjectModel.usageType:
{
// representativeKey: 'ProjectObjectLinkUUID',
// alternativeKey: [ { id : 'Project', uniqueness: #UNIQUE, element: [ 'ProjectUUID' ] } ],
serviceQuality: #D,
dataClass: #TRANSACTIONAL,
sizeCategory: #L
}
@AccessControl.authorizationCheck: #CHECK
@AccessControl.personalData.blocking: #NOT_REQUIRED
@EndUserText.label: 'PPM Project Object Link'
@VDM.lifecycle.contract.type: #SAP_INTERNAL_API
define view I_PPM_ProjectObjectLink as select from I_PPM_ObjectLinkBasicData as ProjectObjectLink
inner join I_PPM_ProjectSummaryTask as PST on ProjectObjectLink.ProjectUUID = PST.ProjectSummaryTaskUUID //Authorization Check
// left outer join /s4ppm/cds_dummy as dummy on PST.ProjectUUID = dummy.dummy_key //workaround to get 'transient' string field
// associations for fixed values and texts
association [1 ] to I_PPM_ObjectLinkType as _ObjectLinkType on $projection.ObjectLinkType = _ObjectLinkType.ObjectLinkType
// TODO TOASK [*] cardinality in Template area code (but cardinality defined differrently in StatusAreaCode view
association [1 ] to I_PPM_ObjectLinkTypeText as _ObjectLinkTypeText on $projection.ObjectLinkType = _ObjectLinkTypeText.ObjectLinkType
and _ObjectLinkTypeText.LanguageCode = $session.system_language
// BO composition associations
association [1..1] to I_PPM_Project as _Root on $projection.ProjectUUID = _Root.ProjectUUID
{
//@ObjectModel.text.element: ['ObjectLinkName']
key cast( ProjectObjectLink.ObjectLinkUUID as /s4ppm/tv_entity_guid ) as ProjectObjectLinkUUID,
@ObjectModel.readOnly: true
PST.ProjectUUID,
// Needed for authorization - Association
@ObjectModel.readOnly: true
PST.ProjectSummaryTaskUUID,
@ObjectModel.readOnly: true
PST.WBSElementInternalID,
@ObjectModel.readOnly: true
@ObjectModel.foreignKey.association: '_ObjectLinkType'
@ObjectModel.text.association: '_ObjectLinkTypeText'
// @Consumption.valueHelp: '' // Not needed as field is readOnly.
ProjectObjectLink.ObjectLinkType,
@ObjectModel.readOnly: true
_ObjectLinkType.ObjectLinkTypeGrouping,
@ObjectModel.readOnly: true
@Semantics.user.createdBy: true
ProjectObjectLink.CreatedByUser,
@ObjectModel.readOnly: true
@Semantics.systemDateTime.createdAt: true
cast( ProjectObjectLink.CreationDateTime as /s4ppm/tv_created_on ) as CreationDateTime,
@ObjectModel.readOnly: true
@Semantics.user.lastChangedBy: true
ProjectObjectLink.LastChangedByUser,
@ObjectModel.readOnly: true
@Semantics.systemDateTime.lastChangedAt: true
cast( ProjectObjectLink.LastChangeDateTime as /s4ppm/tv_changed_on ) as LastChangeDateTime,
// @ObjectModel.readOnly: true
// ObjectKey,
// @ObjectModel.readOnly: true
// ExternalId,
//@ObjectModel.readOnly: true
//ObjectLinkName,
@ObjectModel.readOnly: true
ObjectLinkURL,
// BO Hierarchy related associations
@ObjectModel.association.type: [ #TO_COMPOSITION_PARENT, #TO_COMPOSITION_ROOT ]
_Root,
// Authorization association
PST._ProjObjRoot,
PST._AuthUser,
PST._AuthSubst,
PST._AuthRole,
PST._AuthGroup,
_ObjectLinkType,
_ObjectLinkTypeText
} where _ObjectLinkType.ObjectLinkTypeGrouping = 'YIPD_COLLABORAT'
or _ObjectLinkType.ObjectLinkTypeGrouping = 'SPIN_COLLABORAT' ;
// ProjectObjectLink.ObjectLinkType <> 'YPSROOTWBS' //'YPSPROJDEF'
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_PPM_OBJECTLINKBASICDATA",
"I_PPM_OBJECTLINKTYPE",
"I_PPM_PROJECTSUMMARYTASK"
],
"ASSOCIATED":
[
"I_PPM_AUTHZNBYSUBSTITH",
"I_PPM_AUTHZNBYUSERROLEH",
"I_PPM_AUTHZNBYUSRGRPH",
"I_PPM_AUTHZNBYUSRH",
"I_PPM_OBJECTLINKTYPE",
"I_PPM_OBJECTLINKTYPETEXT",
"I_PPM_PROJECT",
"I_WBSELEMENTBASICDATA"
],
"BASE":
[
"I_PPM_PROJECTSUMMARYTASK"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/