问题标签 [cds]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
137 浏览

authorization - 通过 ASPECT pfcg_auth 通知用户不允许的结果?

在“经典”ABAP 权限检查中,您有时会遍历结果列表。如果至少有一项检查失败,您将通知用户并仅显示他有权使用的项目。我的问题是:您将如何使用 pfcg_auth 方面在 CDS 中执行此操作?例如:

您如何判断选择找到了 50 个销售订单,但用户只被授权显示其中的 40 个?

0 投票
1 回答
718 浏览

odata - 如何访问 OData V2 服务的两级深度嵌套关联?

我已经通过基于 CDS 视图的 ABAP 服务网关 (SEGW) 公开了 OData V2 服务。该视图包含与其他两个视图的间接关联(entity_1 > entity_2 > entity_3 - entity_1 和 entity_3 之间没有直接连接)。我的问题是我无法通过 entity_2 从 entity_1 访问 entity_3。通过使用访问 entity_2 可以正常工作,/service_name/entity_1?$expand=to_entity_2但之后我无法更深入地研究。我尝试使用/service_name/entity_1?expand=to_entity_2($expand=to_entity_3),但是一旦我在第一个查询之后将第二个查询放在括号中,我就会收到一条错误消息。

是我使用了错误的语法还是 OData V2 不支持这些嵌套调用?如果它不受支持,我该如何解决我的问题?该服务用于 SAPUI5 应用程序,它应该与树表绑定,因此我的服务需要(三个)不同的级别。

0 投票
1 回答
1544 浏览

odata - 重命名通过引用的 CDS 视图生成的 OData 服务的实体?

我在 SAP NETWEAVER 7.5 SP 19 (09/2020) 系统上实现了一些带有关联的 CDS 视图。

我在 SEGW 事务中使用数据源引用功能自动从 CDS 视图创建 ODATA 类型和关联,并将它们添加到现有的 SEGW ODATA 项目中。

然后我在 SAPUI5 应用程序中使用该 ODATA 服务。

这是我使用的指南之一:https ://www.saplearners.com/create-odata-service-abap-cds-views-segw/

CDS 视图

CDS 视图的名称类似于/ID/VIEW_NAME_CDS

关联用as重命名,并在名称前加上下划线。然后名称为_assication_name。下划线似乎是 SAP 使导航属性可读的约定。

结果

在 SEGW 项目中,向导会创建一个实体类型,其名称为:x id x view_name_cds类型 每个斜线都将替换为x并在末尾添加类型

导航属性名为to_assication_name

该关联的名称类似于assoc_0D6ADC4B279EADE543738376111F7216

目标

我想更改实体类型、关联和导航属性的名称,因为我想要 sapui5 应用程序中的一些可读名称

澄清 2020/11/30:SEGW 事务本身中的名称也应更改,以便它们在 SEGW 和 SAPUI5 中相同,因为在未来几个月内,另一个开发人员不会认为我更改了 MPC_EXT 类中的名称。至少我不会这么想。:-)

CDS 视图中的注释可以做到这一点吗?还是有什么其他方式?

例子

实体类型:xabcxsystem_result_cdsType

这是骆驼案风格和蛇纹案的混合体。不太可读。

导航属性:to_monitoring_results

没关系,但我想有机会重命名它。

关联:assoc_0D6ADC4B279EADE543738376111F7216

不可读。只有当您单击它时,您才会看到关联所属的 2 个实体。

0 投票
0 回答
146 浏览

odata - CDS 年份类型/从整数类型中删除千位分隔符

我想在我的 Fiori 元素列表报告 - 对象页面中显示一个带有年份的列。我尝试使用日期格式,但如果您尝试创建新条目,您还必须选择日期和月份。情况不应该如此。目前,我为该列分配了整数类型,但这导致年份被格式化为千位分隔符(例如,2,020 而不是 2020)。

你能提供这个问题的解决方案吗?通过调整日期选择器以仅选择一年或从输出中删除千位分隔符?或者解决我的问题的不同答案。

编辑:
我找到了@Common.isCalendarYear注释,但该注释要求相应的字段是一个字符串。因此,如果我在我的 Fiori Elements 应用程序中编辑或创建条目,我可以输入我想要的任何字符串(允许使用字符,长度不限于 4,除非我将字段定义为 String(4))。情况不应该如此。理想情况下,应用程序应仅使用带有年份选择的日期选择器。

0 投票
2 回答
435 浏览

abap - 根据优先级从 JEST 表中获取单个主要状态?

对于 JEST 表中的每个对象编号,我想获得一个我认为是主要状态的状态。

主要问题是,在我的情况下,我认为像 I0076 (删除标志)这样的独特状态可以与创建的其他状态(I0001)同时处于活动状态。在这种情况下,我想使用 GROUP BY objnr,然后在 I0076 始终覆盖任何其他状态的状态下使用 CASE。

ABAP CDS 或 SQL 有可能吗?还是我必须编写 ABAP 代码(AMDP 或后处理)来解决这个问题?

输入:

输出:

0 投票
1 回答
830 浏览

sql - 从 CDS 获取不同键字段值的计数

我想问一下是否可以使用 ABAP 动态获取不同字段的计数。

我们的 CDS 中的 key 有 9 个字段,数量很多,但由于历史决定,无法拆分。我需要的是如下代码:

或者

我知道可以将选择读入内存并获取sy-dbcnt,但我想确保没有其他选项。

0 投票
2 回答
315 浏览

abap - BPOSB 和 EBELP 在 CDS 关联中没有兼容的类型

我是 CDS 的新手,我正在尝试制作我的第一个视图。

问题是,当我尝试以下代码时,我收到错误:

关联 _Purchase_Order:BPOSB 和 EBELP 没有兼容的类型。

是否可以在协会的任何领域进行演员表以使其发挥作用?

提前致谢

0 投票
0 回答
50 浏览

python - 为什么我从 QuantLib 中的不同信用定价引擎得到不同的结果

我正在尝试使用三个信用定价引擎:IsdaCdsEngine,但是我从它们中得到了不同的 NPV 结果MidPointCdsEngineIntegralCdsEngine情况是这样的:当我cds为不同的期限输入相同的点差值时,这些npv值是不同的,而当cds不同期限的点差值不同时,npv结果是相似的(仍然不一样)。

如果有人能给我解释这三个引擎之间有何不同,我将不胜感激。

0 投票
2 回答
3823 浏览

abap - 仅在 CDS 中的数字字段中添加前导零?

在我的 AS ABAP 7.50 系统中,我有一个材料长度为 18 的表,我需要通过 CDS 将其公开,就像在 S/4 中材料长度为 40 一样。系统中的材料 ID 可以是数字(带有前导零)或字母数字。材料字段需要强制转换为MATNR40,如果ID是数字,则需要前导零添加最多40个字符。

首先,我尝试了`lpad. 但当然,它也会在字母数字值中添加前导零:

然后我添加了一个case,但我无法使条件按我预期的那样工作。正如康斯坦丁在评论中确认的那样,我尝试在这里使用正则表达式是不可能的:

CDS 本身是否有解决此问题的方法?

源表:

MATNR18 描述
000000000000000142 数字 ID 材料
MATERIAL_2 字母数字 ID

预期结果:

MATNR40 描述
00000000000000000000000000000000000000142 数字 ID 材料
MATERIAL_2 字母数字 ID
0 投票
1 回答
962 浏览

sap-basis - 查找授权对象 S_SERVICE(参数 SRV_NAME)所需的核心数据/OData 服务的 (usob)Hash

要访问从 SAP R/3 中的核心数据服务 (CDS) 公开数据的 OData Web 服务,用户需要分配一个包含授权对象的授权角色S_SERVICE

授权对象S_SERVICE需要两个参数:

  1. 在我的情况下,服务类型( SRV_TYPE) 设置为HT= "TADIR Object"
  2. 服务哈希( ) SRV_NAME

使用我发现的调试器,功能模块AUTHORITY_CHECK_TADIR_SERVICE将来自S_SERVICE授权对象的哈希与存储在 table 记录中的哈希进行比较usobhash表usobhash的se16视图

我还发现,该功能模块AUTH_TRACE_CALC_HASH使用来自 columns 的数据PGMIDOBJECTOBJ_NAME在 tableusobhash作为输入来生成哈希,然后将其存储在 column 中NAME

到目前为止,每当我想授予用户/角色访问 OData 服务的权限时,我都需要知道这个哈希值。要获取哈希,我要么检查 usobhash 表,要么手动执行AUTH_TRACE_CALC_HASH,然后在我将授权对象分配给 transaction 中的授权角色时输入哈希pfcg。我想必须有一种更简单、更“官方”的方式来做到这一点。我的方法感觉像是一种肮脏的解决方法,但我找不到任何有关如何正确执行此操作的文档。

tl;dr如何在不调试或搜索相关条目的情况下设置S_SERVICE授权对象?AUTH_TRACE_CALC_HASHusobhash