SAP + AI 第3节 PS3大对象一些典型注解
- PS模块三大CDS对象进阶知识点(逐项讲解·源文件对照版)
- 知识点1:WBS层级结构机制
- 知识点2:状态管理机制
- 知识点3:延期/逾期天数计算
- 知识点4:货币、单位、数量、日历、文本等通用注解
- 知识点5:外键关联注解说明
- 知识点6:辅助视图解耦模式
- 知识点7:多表JOIN与字段来源
- 知识点8:CASE表达式与投影逻辑
- 知识点9:扩展视图(E_)机制
- 知识点10:语义键与代表键
- 知识点11:权限控制注解
- 知识点12:文本关联与语言处理
- 知识点13:日期有效性处理
- 知识点14:单位/货币语义关联
- 知识点15:聚合控制注解
- 知识点16:生命周期契约注解
- 知识点17:虚拟元素与计算字段
- 知识点18:会话变量使用
- 知识点19:UNION ALL分支差异化处理
- 知识点20:层级节点关联与UI树控件
- 知识点总结表(含视图链路)
哎,你说AI出来以后吧,再让人一点点手戳文章,没人搓了。还会古法搓文档的,真要绝种了。
PS模块三大CDS对象进阶知识点(逐项讲解·源文件对照版)
每个知识点标注完整视图调用链路(消费层→基础层→DB表),并附用法总结。
知识点1:WBS层级结构机制
用法总结:让WBS在Fiori中呈现树形结构,支持展开/折叠。
视图链路:C_WBSElementBasicInfo->I_WBSElementWithVersion->P_WBSElementWithVersion->I_WBSElementVersion->vsprps_cn->prps->vsprte_cn
->I_WBSElement->prps->prte
原文位置:
I_WBSElement:@ObjectModel.hierarchy.association: '_WBSElementHierarchyNode'/association [0..*] to I_WBSElementHierarchyNode as _WBSElementHierarchyNode on $projection.WBSElement = _WBSElementHierarchyNode.WBSElement/prps.stufe as WBSElementHierarchyLevelC_WBSElementBasicInfo:WBSElement.WBSElementHierarchyLevel
说明:层级能力定义在基础层I_WBSElement,消费层仅暴露平铺字段,不携带树形导航。
知识点2:状态管理机制
用法总结:读取对象系统/用户状态,前端用状态驱动按钮和流程。
视图链路:
- 项目定义:
C_ProjectBasicInfo->I_ProjectWithVersion->P_ProjectWithVersion->I_ProjectVersion->vsproj_cn/I_Project->proj - WBS:
C_WBSElementBasicInfo->I_WBSElementWithVersion->P_WBSElementWithVersion->I_WBSElementVersion->vsprps_cn/prps/vsprte_cn/I_WBSElement->prps/prte - 网络活动:
C_NetworkActivityBasicInfo->I_NetworkActivityWithVersion->P_NetworkActivityWithVersion->I_NetworkActivityVersion->vsafvc_cn/vsafvv_cn/vsafvu_cn/vsafko_cn/vsaufk_cn/I_NetworkActivity->afvc/afvv/afvu/afko/aufk
原文位置:
I_ProjectWithVersion:association [0..1] to I_StsObjConcatActiveStsILL as _StsObjConcatActiveStsILL on _StsObjConcatActiveStsILL.StatusObject = $projection.ProjectObject+ CASE处理I_WBSElementWithVersion:同上,用WBSElementObjectI_NetworkActivity:_ActivityConfirmed(StatusCode='I0009')、_ActivityPartiallyConfirmed(StatusCode='I0010')I_NetworkActivityWithVersion:_ConcatenatedStsObjActiveSts
说明:状态底表是JEST/JSTO,通过函数封装后关联。网络活动按状态码区分已确认/部分确认。
知识点3:延期/逾期天数计算
用法总结:用当前日期与计划日期比对,算出进度预警天数。
视图链路:
- WBS:
C_WBSElementBasicInfo->I_WBSElementWithVersion->P_WBSElementWithVersion->I_WBSElementVersion/I_WBSElement->prps/prte - 网络活动:
C_NetworkActivityBasicInfo->I_NetworkActivityWithVersion->P_NetworkActivityWithVersion->I_NetworkActivityVersion/I_NetworkActivity->afvc/afvv
原文位置:
P_WBSElementWithVersion:DATS_DAYS_BETWEEN(...)动态计算 / 版本分支cast(0 as int4)P_NetworkActivityWithVersion:dats_days_between(...)动态计算 / 版本分支cast(0 as int4)
说明:运营分支实时计算,版本分支硬编码0,保证快照稳定。
知识点4:货币、单位、数量、日历、文本等通用注解
用法总结:给字段加业务语义,OData/Fiori自动格式化显示。
视图链路:
- 网络活动:
C_NetworkActivityBasicInfo->I_NetworkActivityWithVersion->P_NetworkActivityWithVersion->I_NetworkActivityVersion/I_NetworkActivity->afvc/afvv/afvu/afko/aufk - 项目定义:
C_ProjectBasicInfo->I_ProjectWithVersion->P_ProjectWithVersion->I_ProjectVersion/I_Project->proj
原文位置:
I_NetworkActivity:@Semantics.currencyCode: true/@Semantics.unitOfMeasure: true/@Semantics.quantity.unitOfMeasure/@Semantics.businessDate.from/toI_Project:@Semantics.calendar.dayOfMonth: true/@Semantics.text: true
说明:注解让OData元数据自动生成语义信息,前端免手工格式化。
知识点5:外键关联注解说明
用法总结:声明字段是外键,框架生成导航属性供OData使用。
视图链路:
I_ProjectVersion->vsproj_cnI_WBSElementVersion->vsprps_cn/prps/vsprte_cnI_NetworkActivity->afvc/afvv/afvu/afko/aufk
原文位置:
I_ProjectVersion:@ObjectModel.foreignKey.association: '_ProjectByInternalKey'/key vsproj_cn.pspnr as ProjectInternalIDI_WBSElementVersion:@ObjectModel.foreignKey.association: '_WBSElement'/key cast( vsprps_cn.posid as ps_posid_edit ) as WBSElementI_NetworkActivity:@ObjectModel.foreignKey.association: '_ProjectNetwork'/key cast ( afko.aufnr as ps_s4_aufnr ) as ProjectNetwork
说明:带版本视图信息不全,通过引用不带版本的辅助视图补全后再UNION。
知识点6:辅助视图解耦模式
用法总结:用主键为内部ID的辅助视图解决关联目标主键不匹配。
视图链路:
I_WBSElement->prps/prteI_Project->proj
原文位置:
I_WBSElement:association [1..1] to I_ProjectByInternalKey as _Project on $projection.ProjectInternalID = _Project.ProjectInternalIDI_Project:association [1..*] to I_WBSElement as _WBSElement on $projection.ProjectInternalID = _WBSElement.ProjectInternalID
说明:WBS只有内部ID,项目主键是外部编号,SAP建辅助视图I_ProjectByInternalKey解决。
知识点7:多表JOIN与字段来源
用法总结:网络活动数据分散在多张表,用JOIN整合成宽表视图。
视图链路:
I_NetworkActivity->afvc/afvv/afvu/afko/aufk/t430I_NetworkActivityVersion->vsafvc_cn/vsafvv_cn/vsafvu_cn/vsafko_cn/vsaufk_cn/t430
原文位置:
I_NetworkActivity:from afvc left outer join afvv ... inner join aufk on aufk.autyp='20' inner join t430 on t430.steus=afvc.steusI_NetworkActivityVersion:from vsafvc_cn left outer join vsafvv_cn ... inner join vsaufk_cn ... inner join t430
说明:AFVC主表,AFVV/AFVU/AFKO左连接,AUFK/T430内连接过滤有效数据。
知识点8:CASE表达式与投影逻辑
用法总结:根据活动是否挂WBS,取不同的项目/WBS字段。
视图链路:
I_NetworkActivity->afvc/afvv/afvu/afko/aufk/t430I_NetworkActivityVersion->vsafvc_cn/vsafvv_cn/vsafvu_cn/vsafko_cn/vsaufk_cn/t430
原文位置:
I_NetworkActivity:case when afvc.projn = '00000000' then _Project.Project else _WBSElement._Project.Project end as ProjectI_NetworkActivityVersion:case when vsafvc_cn.projn = '00000000' then _Project.Project else _WBSElement._Project.Project end as Project
说明:projn='00000000'表示活动不挂WBS,直接挂项目。_WBSElement._Project是多级关联导航。
知识点9:扩展视图(E_)机制
用法总结:SAP预留的空壳视图,客户通过扩展视图加自定义字段。
视图链路:
- 项目定义:
C_ProjectBasicInfo->I_ProjectWithVersion->P_ProjectWithVersion->I_ProjectVersion/I_Project->proj - WBS:
C_WBSElementBasicInfo->I_WBSElementWithVersion->P_WBSElementWithVersion->I_WBSElementVersion/I_WBSElement->prps - 网络活动:
C_NetworkActivityBasicInfo->I_NetworkActivityWithVersion->P_NetworkActivityWithVersion->I_NetworkActivityVersion/I_NetworkActivity->afvc
原文位置:
I_Project:@Metadata.allowExtensions:true/association [1..1] to E_Project as _Extension on proj.pspid = _Extension.ProjectI_ProjectWithVersion:_Extension(运营)/_VersionExtension(版本)I_WBSElement:association [1..1] to E_WBSElement as _Extension on prps.posid = _Extension.WBSElementI_NetworkActivityWithVersion:_Extension用内部编号关联
说明:SAP标准视图加字段的官方入口,升级不冲突,通过_Extension自动向上传递。
知识点10:语义键与代表键
用法总结:语义键给UI显示用,代表键给外键关联用。
视图链路:
- 项目定义:
C_ProjectBasicInfo->I_ProjectWithVersion/I_Project->proj - WBS:
C_WBSElementBasicInfo->I_WBSElementWithVersion/I_WBSElement->prps - 网络活动:
C_NetworkActivityBasicInfo->I_NetworkActivityWithVersion/I_NetworkActivity->afvc
原文位置:
C_ProjectBasicInfo:@ObjectModel.semanticKey: [ 'Project', 'Version' ]I_Project:@ObjectModel.representativeKey: 'Project'C_WBSElementBasicInfo:@ObjectModel.semanticKey: [ 'WBSElement','Version']I_WBSElement:@ObjectModel.representativeKey: 'WBSElement'C_NetworkActivityBasicInfo:@ObjectModel.semanticKey: ['ProjectNetwork', 'NetworkActivity']I_NetworkActivity:@ObjectModel.representativeKey: 'NetworkActivity'
说明:语义键多字段用于UI粗体显示,代表键单字段用于外键关联目标。
知识点11:权限控制注解
用法总结:声明视图的权限检查行为和特权关联。
视图链路:
- 项目定义:
C_ProjectBasicInfo->I_ProjectWithVersion/I_ProjectVersion->vsproj_cn - WBS:
C_WBSElementBasicInfo->I_WBSElementWithVersion/I_WBSElement->prps - 网络活动:
C_NetworkActivityBasicInfo->I_NetworkActivityWithVersion/I_NetworkActivity->afvc
原文位置:
I_ProjectWithVersion:#NOT_REQUIRED/privilegedAssociations: ['_Extension','_VersionExtension']/#BLOCKED_DATA_EXCLUDEDI_ProjectVersion:#CHECK/#REQUIREDI_WBSElementWithVersion:#CHECK/privilegedAssociationsI_WBSElement:privilegedAssociations: ['_WBSElementHierarchyNode']/#REQUIREDI_NetworkActivity:privilegedAssociations: ['_MRPController']
说明:privilegedAssociations让扩展/层级关联继承主视图权限,避免重复检查。
知识点12:文本关联与语言处理
用法总结:按登录语言取文本字段,多语言环境必备。
视图链路:
C_ProjectBasicInfo->I_ProjectWithVersion->P_ProjectWithVersion->I_ProjectVersion/I_ProjectC_WBSElementBasicInfo->I_WBSElementWithVersion->P_WBSElementWithVersion->I_WBSElementVersion/I_WBSElementC_NetworkActivityBasicInfo->I_NetworkActivityWithVersion->P_NetworkActivityWithVersion->I_NetworkActivityVersion/I_NetworkActivity
原文位置:
C_ProjectBasicInfo:cast( I_ProjectWithVersion._NetworkProfile._Text[1: Language = $session.system_language ].NetworkProfileName ...)C_WBSElementBasicInfo:cast( WBSElement._ProjectType._Text[1: Language = $session.system_language ].ProjectTypeName ...)C_NetworkActivityBasicInfo:cast ( _NetworkActivity._CostElementOnChartOfAccounts._Text[1:Language = $session.system_language].CostElementName ...)I_NetworkActivityWithVersion:cast ( _ProfitCenter._Text[1:Language = $session.system_language].ProfitCenterName ...)
说明:文本关联只在组合层/消费层过滤语言,基础层保持中立。
知识点13:日期有效性处理
用法总结:用dats_is_valid检查日期,避免无效日期显示异常。
视图链路:
I_WBSElementVersion->vsprps_cn/prps/vsprte_cnI_WBSElement->prps/prteI_NetworkActivity->afvc/afvv/afvu/afko/aufk
原文位置:
I_WBSElementVersion/I_WBSElement:cast ( case dats_is_valid( prte.pstrt ) when 0 then '00000000' else prte.pstrt end as ps_s4_pstrt preserving type ) as BasicStartDate
说明:PRPS/PRTE日期字段可能是初始值,CASE包装保证输出统一。
知识点14:单位/货币语义关联
用法总结:数量和金额绑定单位/货币,前端自动格式化。
视图链路:
I_NetworkActivity->afvc/afvv/afvu/afko/aufk
原文位置:
I_NetworkActivity:@Semantics.unitOfMeasure: true/@Semantics.quantity.unitOfMeasure: 'NetworkActivityQuantityUnit'/@Semantics.currencyCode: true
说明:OData自动生成sap:semantics,前端显示100 PC而非100。
知识点15:聚合控制注解
用法总结:定义字段在分析场景中的默认聚合行为。
视图链路:
I_NetworkActivity->afvc/afvv/afvu/afko/aufkI_WBSElementVersion->vsprps_cn/prps/vsprte_cn
原文位置:
I_NetworkActivity:@DefaultAggregation: #NONE/@DefaultAggregation: #SUMI_WBSElementVersion:@DefaultAggregation: #NONE
说明:分析视图中#SUM自动求和,#NONE不聚合(日期、单位、文本)。
知识点16:生命周期契约注解
用法总结:声明视图稳定性承诺,客户不应依赖内部API。
视图链路:
- 项目定义:
I_ProjectWithVersion/I_ProjectVersion - WBS:
I_WBSElementWithVersion/I_WBSElementVersion - 网络活动:
I_NetworkActivityWithVersion/I_NetworkActivity
原文位置:
I_ProjectWithVersion/I_ProjectVersion/I_WBSElementWithVersion/I_NetworkActivity:@VDM.lifecycle.contract.type: #SAP_INTERNAL_API
说明:SAP可随时修改,客户应通过C_消费视图或Z视图访问。
知识点17:虚拟元素与计算字段
用法总结:版本分支硬编码0,运营分支动态计算,保证快照稳定。
视图链路:
- WBS:
P_WBSElementWithVersion->I_WBSElementVersion/I_WBSElement->prps/prte - 网络活动:
P_NetworkActivityWithVersion->I_NetworkActivityVersion/I_NetworkActivity->afvc/afvv
原文位置:
P_WBSElementWithVersion/P_NetworkActivityWithVersion:版本分支cast(0 as int4),运营分支CASE动态计算
说明:版本是历史快照,动态天数依赖当前日期会破坏可比性。
知识点18:会话变量使用
用法总结:运行时获取当前日期和语言,实现动态过滤。
视图链路:
P_WBSElementWithVersion->I_WBSElementVersion/I_WBSElementP_NetworkActivityWithVersion->I_NetworkActivityVersion/I_NetworkActivityC_ProjectBasicInfo->I_ProjectWithVersionC_WBSElementBasicInfo->I_WBSElementWithVersion
原文位置:
P_WBSElementWithVersion:DATS_DAYS_BETWEEN( cast($session.system_date as sydatum), ...)C_ProjectBasicInfo:[1: Language = $session.system_language ]C_WBSElementBasicInfo:WBSElement._ProfitCenter[1: ValidityEndDate >= $session.system_date and ValidityStartDate <= $session.system_date ]
说明:会话变量运行时求值,基础层不用,组合/消费层才用。
知识点19:UNION ALL分支差异化处理
用法总结:合并运营和版本数据,字段结构一致但语义差异化。
视图链路:
- 项目定义:
P_ProjectWithVersion->I_ProjectVersion->vsproj_cn/I_Project->proj - WBS:
P_WBSElementWithVersion->I_WBSElementVersion->vsprps_cn/prps/vsprte_cn/I_WBSElement->prps/prte - 网络活动:
P_NetworkActivityWithVersion->I_NetworkActivityVersion->vsafvc_cn/… /I_NetworkActivity->afvc/…
原文位置:
P_ProjectWithVersion:版本分支'X' as IsProjectVersionObject,运营分支key '' as Version, '' as IsProjectVersionObjectP_WBSElementWithVersion:同上 + Due/Overdue差异化P_NetworkActivityWithVersion:同上 + Due/Overdue差异化
说明:字段结构必须一致,值语义差异化。运营分支硬编码'',版本分支用实际值。
知识点20:层级节点关联与UI树控件
用法总结:声明WBS层级关联,让UI支持树形展开。
视图链路:C_WBSElementBasicInfo->I_WBSElementWithVersion->P_WBSElementWithVersion->I_WBSElementVersion->vsprps_cn/prps/vsprte_cn
->I_WBSElement->prps/prte
原文位置:
I_WBSElement:@ObjectModel.hierarchy.association: '_WBSElementHierarchyNode'/association [0..*] to I_WBSElementHierarchyNode as _WBSElementHierarchyNode on $projection.WBSElement = _WBSElementHierarchyNode.WBSElement/prps.stufe as WBSElementHierarchyLevelC_WBSElementBasicInfo:仅暴露WBSElementHierarchyLevel
说明:层级能力定义在I_WBSElement,消费层只暴露平铺层级号,不携带树形导航。
知识点总结表(含视图链路)
| 序号 | 知识点 | 核心机制 | 关键视图链路 |
|---|---|---|---|
| 1 | WBS层级结构 | @ObjectModel.hierarchy.association | C_WBSElementBasicInfo->I_WBSElementWithVersion->P_WBSElementWithVersion->I_WBSElementVersion/I_WBSElement->prps |
| 2 | 状态管理 | _StsObjConcatActiveStsILL | C_ProjectBasicInfo->I_ProjectWithVersion->P_ProjectWithVersion / C_WBSElementBasicInfo->I_WBSElementWithVersion / C_NetworkActivityBasicInfo->I_NetworkActivityWithVersion->P_NetworkActivityWithVersion |
| 3 | 延期/逾期天数 | DATS_DAYS_BETWEEN | C_WBSElementBasicInfo->…->P_WBSElementWithVersion / C_NetworkActivityBasicInfo->…->P_NetworkActivityWithVersion |
| 4 | 语义注解 | @Semantics.* | I_NetworkActivity->afvc/afvv/afvu/afko/aufk / I_Project->proj |
| 5 | 外键注解 | @ObjectModel.foreignKey.association | I_ProjectVersion->vsproj_cn / I_WBSElementVersion->vsprps_cn / I_NetworkActivity->afvc |
| 6 | 辅助视图解耦 | I_ProjectByInternalKey | I_WBSElement->prps / I_Project->proj |
| 7 | 多表JOIN | AFVC+AFVV+AFVU+AFKO+AUFK | I_NetworkActivity->afvc/afvv/afvu/afko/aufk/t430 |
| 8 | CASE投影 | case when projn='00000000' | I_NetworkActivity->afvc/afvv/afvu/afko/aufk |
| 9 | 扩展视图 | E_Project/E_WBSElement | C_ProjectBasicInfo->…->I_Project / C_WBSElementBasicInfo->…->I_WBSElement |
| 10 | 语义键/代表键 | @ObjectModel.semanticKey | C_ProjectBasicInfo->I_ProjectWithVersion / C_WBSElementBasicInfo->I_WBSElementWithVersion / C_NetworkActivityBasicInfo->I_NetworkActivityWithVersion |
| 11 | 权限控制 | @AccessControl.* | 各视图 |
| 12 | 文本关联 | $session.system_language | C_ProjectBasicInfo->I_ProjectWithVersion / C_WBSElementBasicInfo->I_WBSElementWithVersion / C_NetworkActivityBasicInfo->I_NetworkActivityWithVersion |
| 13 | 日期有效性 | dats_is_valid | I_WBSElementVersion->vsprps_cn / I_WBSElement->prps |
| 14 | 单位/货币语义 | @Semantics.unitOfMeasure | I_NetworkActivity->afvc/afvv |
| 15 | 聚合控制 | @DefaultAggregation | I_NetworkActivity->afvv / I_WBSElementVersion->vsprte_cn |
| 16 | 生命周期契约 | @VDM.lifecycle.contract.type | I_ProjectWithVersion / I_WBSElementWithVersion / I_NetworkActivityWithVersion |
| 17 | 虚拟元素 | 版本分支硬编码0 | P_WBSElementWithVersion / P_NetworkActivityWithVersion |
| 18 | 会话变量 | $session.system_date | P_WBSElementWithVersion / P_NetworkActivityWithVersion / C_ProjectBasicInfo |
| 19 | UNION ALL差异化 | 版本分支''/'X' | P_ProjectWithVersion / P_WBSElementWithVersion / P_NetworkActivityWithVersion |
| 20 | 层级节点UI | _WBSElementHierarchyNode | C_WBSElementBasicInfo->I_WBSElementWithVersion->P_WBSElementWithVersion->I_WBSElementVersion/I_WBSElement->prps |
所有内容均严格来源于用户提供的CDS源文件,视图链路从消费层追溯到DB表。