SAP CAP逻辑删除Node.js实现

2020-08-14 06:28发布

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

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


大家好。

我有一个要求,而不是删除一条记录,而是将一个状态设置为一个特定的值(不活动),因此我试图在on DELETE之前使用实现一个自定义逻辑。 我已经尝试执行以下更新,但是执行了标准的DELETE,并且从数据库中删除了记录。

 this.on('DELETE','FaultReason',req => {
     const tx = this.transaction(req)
     tx.run(UPDATE(FaultReason).set({changeType:'D',status:'I'})
     .where({ID:req.data.ID}))
   })

我尝试包含req.reply()来停止更新后的流程,但更新未反映在数据库上。

 this.on('DELETE','FaultReason',req => {
     const tx = this.transaction(req)
     tx.run(UPDATE(FaultReason).set({changeType:'D',status:'I'})
     .where({ID:req.data.ID}))
     req.reply()
   })

在事件发生之前,我也尝试过使用相同的代码,结果也相同。

对于Java,我已经看到有一种方式可以说一个操作已完成并停止下一个动作(context.setCompleted()),但是我没有看到与node.js类似的东西。 防止下一步发生的唯一记录方法是抛出异常或使用拒绝。

我可以错过有关node.js API的观点吗?

我知道我可以实现(已经完成)用于停用的动作,但是使用DELETE动词会很好。

最好的问候

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

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


大家好。

我有一个要求,而不是删除一条记录,而是将一个状态设置为一个特定的值(不活动),因此我试图在on DELETE之前使用实现一个自定义逻辑。 我已经尝试执行以下更新,但是执行了标准的DELETE,并且从数据库中删除了记录。

 this.on('DELETE','FaultReason',req => {
     const tx = this.transaction(req)
     tx.run(UPDATE(FaultReason).set({changeType:'D',status:'I'})
     .where({ID:req.data.ID}))
   })

我尝试包含req.reply()来停止更新后的流程,但更新未反映在数据库上。

 this.on('DELETE','FaultReason',req => {
     const tx = this.transaction(req)
     tx.run(UPDATE(FaultReason).set({changeType:'D',status:'I'})
     .where({ID:req.data.ID}))
     req.reply()
   })

在事件发生之前,我也尝试过使用相同的代码,结果也相同。

对于Java,我已经看到有一种方式可以说一个操作已完成并停止下一个动作(context.setCompleted()),但是我没有看到与node.js类似的东西。 防止下一步发生的唯一记录方法是抛出异常或使用拒绝。

我可以错过有关node.js API的观点吗?

我知道我可以实现(已经完成)用于停用的动作,但是使用DELETE动词会很好。

最好的问候

付费偷看设置
发送
4条回答
lukcy2020
1楼 · 2020-08-14 06:50.采纳回答

伊萨亚斯,

对我来说,当我将Entity作为字符串而不是作为对象提供给UPDATE时,它将起作用:

 const cds = require('@ sap/cds')

 module.exports = function(){
     const {Foo} = this.entities; //使用对象不起作用
     this.on('DELETE','Foo',async req => {
         const tx = this.transaction(req)
         const updateCount =等待tx.run(
             UPDATE('Foo')。set({status:'D'})。where({ID:req.data.ID})//提供Foo作为字符串
         );
         req.reply();
     });
 } 

当我尝试将Foo传递给UPDATE而不是'Foo'时,我得到与您相同的错误:

错误:未为UPDATE com.example.Foo注册任何处理程序
     在Object.module.exports [作为处理程序](/Users/esch/.nvm/versions/node/v12.16.1/lib/node_modules/@sap/cds-dk/node_modules/@sap/cds-runtime/lib/cds  -services/services/handlers/finalOn.js:5:13)
     在下一个(/Users/esch/.nvm/versions/node/v12.16.1/lib/node_modules/@sap/cds-dk/node_modules/@sap/cds-runtime/lib/cds-services/services/hooks/On  .js:171:37)
     在On._middleware(/Users/esch/.nvm/versions/node/v12.16.1/lib/node_modules/@sap/cds-dk/node_modules/@sap/cds-runtime/lib/cds-services/services/hooks /On.js:200:5)
     在/Users/esch/.nvm/versions/node/v12.16.1/lib/node_modules/@sap/cds-dk/node_modules/@sap/cds-runtime/lib/cds-services/services/hooks/On.js  :85:12
     在新的Promise中()
     在On.executeHandlerIfListed(/Users/esch/.nvm/versions/node/v12.16.1/lib/node_modules/@sap/cds-dk/node_modules/@sap/cds-runtime/lib/cds-services/services/hooks中/On.js:84:12)
     在ApplicationService._actionsFunctionsHandlers(/Users/esch/.nvm/versions/node/v12.16.1/lib/node_modules/@sap/cds-dk/node_modules/@sap/cds-runtime/lib/cds-services/services/Service中 .js:646:72)
     在processTicksAndRejections(内部/进程/task_queues.js:97:5)
     在异步ApplicationService.processEvent(/Users/esch/.nvm/versions/node/v12.16.1/lib/node_modules/@sap/cds-dk/node_modules/@sap/cds-runtime/lib/cds-services/services/ Service.js:621:9)
     在异步Object.handler(/Users/esch/Repositories/github/sap-cap-examples/logical-delete/srv/foo-service.js:9:29){
   查询:{更新:{
     实体:" com.example.Foo",
     其中:{status:{val:'D'}},
     其中:[
       {ref:['ID']},
       '=',
       {val:'f56645fa-cdee-428b-880f-833b97c588cf'}
     ]
   }},
   事件:" UPDATE",
   目标:" com.example.Foo"
 } 

亲切的问候,

塞巴斯蒂安

Cikesha
2楼-- · 2020-08-14 06:41

嗨。 它可以正常工作

昵称总是被占用
3楼-- · 2020-08-14 06:50

您好,以赛亚人,

尝试添加异步/等待并查看是否有效:

 this.on('DELETE','FaultReason  ',异步(req)=> {
     const tx = this.transaction(req)
     等待tx.run(UPDATE(FaultReason).set({changeType:'D',status:'I'})
     .where({ID:req.data.ID}))
     req.reply()
   })
宇峰Kouji
4楼-- · 2020-08-14 06:48

嗨,乔德尔。 当我尝试异步时,响应中出现了类似的错误:

 {
     "错误":{
         " code":" 501",
         " message":"服务器不支持满足请求所需的功能"
     }
 }
 

在日志上,我有一个堆栈跟踪,说没有UPDATE的句柄

删除/api/portal/FaultReason(4f181c3a-d135-4844-bbf9-c29ac74cc1af)
 错误:没有为UPDATE后端注册任何处理程序。
 在Object.module.exports [作为处理程序](/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/services/handlers/finalOn.js:5:13)
 在下一个(/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/services/hooks/On.js:171:37)
 在On._middleware(/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/services/hooks/On.js:200:5)
 在/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/services/hooks/On.js:85:12
 在新的Promise中()
 在On.executeHandlerIfListed(/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/services/hooks/On.js:84:12)
 在ApplicationService._actionsFunctionsHandlers(/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/services/Service.js:646:72)
 在processTicksAndRejections(内部/进程/task_queues.js:97:5)
 在异步ApplicationService.processEvent(/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/services/Service.js:621:9)
 在异步Object.handler(/home/vcap/app/portal-service.js:16:5){
 查询:{更新:{
 实体:" backend.FaultReason",
 其中:{changeType:{val:'D'},状态:{val:'X'}},
 其中:[
 {ref:['ID']},
 '=',
 {val:'4f181c3a-d135-4844-bbf9-c29ac74cc1af'}
 ]
 }},
 事件:" UPDATE",
 目标:" backend.FaultReason"
 }
 [2020-07-20T16:14:03.315Z | 错误|  1453907]:服务器不支持满足请求所需的功能
 [2020-07-20T16:14:03.315Z | 错误|  1453907]:错误堆栈跟踪:错误:服务器不支持在_getErrorObject(/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/util/getError.js  :61:12)在Object.module.exports处的getError(/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/util/getError.js:79:17)[作为处理程序]  (/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/services/handlers/finalOn.js:10:49)在下一个(/home/vcap/app/node_modules/@ sap/在On._middleware(/home/vcap/app/node_modules/@ sap/cds-runtime/lib/cds-services/services)上的cds-runtime/lib/cds-services/services/hooks/On.js:171:37) /hooks/On.js:200:5)位于/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/services/hooks/On.js:85:12,位于新Promise(< 在ApplicationService._actionsFunctionsHandlers(/home/)的On.executeHandlerIfListed(/home/vcap/app/node_modules/@sap/cds-runtime/lib/cds-services/services/hooks/On.js:84:12)  vcap/app/node_modules/@ sap/cds-runtime/l  ib/cds-services/services/Service.js:646:72)位于processTicksAndRejections(内部/process/task_queues.js:97:5)

我将尝试理解这是什么意思,我尝试为UPDATE添加处理程序,但出现了相同的消息。

最诚挚的问候

一周热门 更多>