在ObjectPage表中引用来自外部实体的字段

2020-08-19 15:48发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


任何人都可以提供解决方法。

我正在研究一个用例,以维护使用业务合作伙伴设计的人员。 在此设计中,一个人可以担任多个角色之一。 下面是我到目前为止创建的规范化数据模型的图表,该模型似乎正在起作用。

我能够执行以下操作而无需维护service.js文件。 即 CDS引擎开箱即用地支持所有原始操作(这是CDS团队的一项令人印象深刻的工作)。 到目前为止,我可以:

  • 创建人,
  • 存储Persons和Person_Role的草稿版本
  • 创建一个新角色(在编辑模式下)
  • 使用搜索帮助来搜索Person_Role.ID值,其中搜索帮助引用了Role实体集

要使ObjectPage对用户更有意义,我想为"角色名称"添加一列,该列将显示所选角色ID的对应名称(Role.roleName)。

有没有办法在保持标准化数据模型的同时做到这一点?

预先感谢:

PS:

我确实尝试了 https中提到的方法: //blogs.sap.com/2019/08/21/computed-field-example-in-cap/

我发现 DJ Adams 方法导致出现" SQLITE_ERROR:否 这样的列:roleName "在创建新的Person_Role时-可能需要一些干预才能删除计算出的roleName字段,然后手动创建插入内容

(请参阅: https://github.com/scongia/or-assistant/commit/cfa0e096e52b98a3a380140df8fa6d2014d50657 )。

然后,我尝试了 Pierre Dominique 的方法,但这导致AdminService出现编译错误,并说" com.or.assistant.Person_Role"的自动暴露实体的" AdminService.Person_Role"与其他定义冲突-可能是因为Persons具有@ odata.draft.enabled批注

(请参阅: https://github.com/scongia/or-assistant/commit/994cb183d29c1bb6c3a03423c7599383056733dc

personsobjectdetails.jpg (52.4 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


任何人都可以提供解决方法。

我正在研究一个用例,以维护使用业务合作伙伴设计的人员。 在此设计中,一个人可以担任多个角色之一。 下面是我到目前为止创建的规范化数据模型的图表,该模型似乎正在起作用。

我能够执行以下操作而无需维护service.js文件。 即 CDS引擎开箱即用地支持所有原始操作(这是CDS团队的一项令人印象深刻的工作)。 到目前为止,我可以:

  • 创建人,
  • 存储Persons和Person_Role的草稿版本
  • 创建一个新角色(在编辑模式下)
  • 使用搜索帮助来搜索Person_Role.ID值,其中搜索帮助引用了Role实体集

要使ObjectPage对用户更有意义,我想为"角色名称"添加一列,该列将显示所选角色ID的对应名称(Role.roleName)。

有没有办法在保持标准化数据模型的同时做到这一点?

预先感谢:

PS:

我确实尝试了 https中提到的方法: //blogs.sap.com/2019/08/21/computed-field-example-in-cap/

我发现 DJ Adams 方法导致出现" SQLITE_ERROR:否 这样的列:roleName "在创建新的Person_Role时-可能需要一些干预才能删除计算出的roleName字段,然后手动创建插入内容

(请参阅: https://github.com/scongia/or-assistant/commit/cfa0e096e52b98a3a380140df8fa6d2014d50657 )。

然后,我尝试了 Pierre Dominique 的方法,但这导致AdminService出现编译错误,并说" com.or.assistant.Person_Role"的自动暴露实体的" AdminService.Person_Role"与其他定义冲突-可能是因为Persons具有@ odata.draft.enabled批注

(请参阅: https://github.com/scongia/or-assistant/commit/994cb183d29c1bb6c3a03423c7599383056733dc

personsobjectdetails.jpg (52.4 kB)
付费偷看设置
发送
3条回答
hongfeng1314
1楼-- · 2020-08-19 16:20

如上所述。 我设法通过将Promise.all添加到处理程序中来使角色名称出现,如上所示。

我观察到的是,在Service层中添加新字段时,这会导致SQL错误,使用oData v2创建新记录,但是使用oData v4时没有错误

致谢

蓋茨
2楼-- · 2020-08-19 16:11

您是否使用HANA数据库尝试过DJ的方法?

SAP德到
3楼-- · 2020-08-19 16:11

您好,Gregor。

我创建一个新人员时发生错误...我认为这是一个完全不同的问题,在显示角色名称后应该解决。

在vscode中工作,我设法使新字段出现在Person_Role实体下的元数据文件中。 我还实现了服务处理程序中的代码,但没有成功。

//即时从Role.roleName中填充Person_Role.roleName
     srv.after([['READ'],'Person_Role',(person_roles,req)=> {
        //const tx = cds.transaction(req),roleID = req.data
         return person_roles.map(async person_role => {
             const角色=等待cds.transaction(req).run(
               SELECT.from(Roles).where({ID:person_role.role})
             )
             person_role.roleName =角色[0] .roleName
           })
     })

当我调试服务处理程序时,我发现Select正在返回Role实体,并使用正确的值填充person_role.rolename,但是此值未在响应中返回。 我想念什么吗?

一周热门 更多>