点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
如果在cds模型中将实体的字段标记为虚拟,则不会在相应的数据库表上创建任何字段。 到目前为止,一切都很好。
如果现在使用GET请求在虚拟字段上使用过滤器调用此实体,则会返回以下错误:
<错误xmlns =" http://docs.oasis-open.org/odata/ns/metadata">
500
<消息>
无法在以下行设置参数:1.参数必须是字符串
在调试过程中,我还遇到了以下异常文本:(属性VHierarchyNodeLevel被标记为虚拟)
选择a.modifiedAt AS" a_modifiedAt",a.createdAt AS" a_createdAt",a.createdBy AS" a_createdBy",a.modifiedBy AS" a_modifiedBy",a.VId AS" a_VId",a.VName AS" a_VName" ",a.VHierarchyNodeLevel AS" a_VHierarchyNodeLevel"来自Service_PlanningUnits,其中a.VHierarchyNodeLevel <=? LIMIT 128 OFFSET 0
是否有可能将字段标记为虚拟字段,但是如果请求中存在针对此查询的过滤器,则会将虚拟字段添加到数据库查询的WHERE子句中?
在CDS实体之后,将虚拟字段填充在on.after(" READ",...)。
实体PlanningUnit:托管{ 键VId:UUID; VName:字符串; virtual VHierarchyNodeLevel:整数; }
亲爱的西蒙·佩斯托弗,
非常感谢您为我们提供了详细的分析。 实际上,虚拟字段一定不能出现在SQL语句的WHERE子句中。
我们将研究一种修复程序,以防止将来发生这种情况。
但是,强烈建议不要对虚拟字段应用过滤条件,因为这样会大大降低性能(必须从数据库中提取所有项目,对于每个条目,都必须计算虚拟字段,然后才计算结果集 被过滤)。
再次感谢您!
David
可能相关...
你好,正如我所承诺的,我刚刚在 https://github.com/SAP-samples/cloud-cap-samples/blob/a6ae7cfc8db22daf007138f6f206eba602345b39 srv/admin-service.cds#L16
机制是:将这些计算出的字段转换为SQL视图后,您可以根据它们进行任意过滤和排序。
您不必像示例中那样显式添加@ Core.Computed批注,因为只要将计算字段公开给OData,我们就会自动添加。
您还可以通过在示例根目录中执行以下操作,检查映射到SQL数据库时将CDS定义转换为什么: cds packages/bookshop/srv/admin-service.cds -2 sql> t.sql
例如 上面显示的实体变为以下CREATE VIEW语句:
,Daniel
一周热门 更多>