CF上的CAP处理程序中出现错误"预期查询目标,但未定义"

2020-08-21 16:53发布

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

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


死人专家

我已将CAP项目部署到CF(试用版)。 UI,服务模块,DB似乎正常工作。 我可以访问要获取数据的API。 到目前为止,一切都很好。

但是,每当我的自定义处理程序之一访问CDS事务时,都会出现以下错误:

在运行cds.transaction的行上

"预期查询目标,但未定义" 。 示例:

 2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0] OUT错误:预期为查询目标,但未定义
    2020-03-25T17:47:36.06 + 0100 Function.factory的[APP/PROC/WEB/0] OUT [自](/home/vcap/app/node_modules/@ sap/cds/lib/ql/index。  js:44:26)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在SELECT_ood_from(/home/vcap/app/node_modules/@sap/cds/lib/ql/index.js:99:30)处输出
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在Function.Object.assign._ [作为一体](/home/vcap/app/node_modules/@ sap/cds/lib/ql/index.js:103:68)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在Object.on上以[作为处理程序]输出(/home/vcap/app/srv/license-service.js:59:28)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在下一个(/home/vcap/app/node_modules/@sap/cds-services/lib/services/hooks/On.js:  185:37)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在On._middleware(/home/vcap/app/node_modules/@ sap/cds-services/lib/services/hooks/On。  js:214:5)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在Promise(/home/vcap/app/node_modules/@sap/cds-services/lib/services/hooks/On.js:  84:12)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在新的Promise中退出()
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在On.executeHandlerIfListed(/home/vcap/app/node_modules/@ sap/cds-services/lib/services/hooks/On。  js:83:12)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在ApplicationService._actionsFunctionsHandlers(/home/vcap/app/node_modules/@sap/cds-services/lib/services/Service.js:  599:72)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]错误[2020-03-25T16:47:36.060Z | 错误|  1094159]:无法回滚:找不到客户端
 

示例处理程序:

 this.before('CREATE','Licenses',async(req)=> {
           /**
              *域模型尚无UNIQUE注释,因此此处理程序可以防止
              *与要创建的许可证ID相同的许可证
              *
              */
             const license =等待cds.transaction(req).run(
                 SELECT.one().from(许可证).where({license_ID:req.data.license_ID})
             )
             if(license!= null){
                 req.reject(409,`ID为$ {req.data.license_ID}的许可证已经存在`);
             }
         })

 

不访问cds.transaction的处理程序可以正常工作。 同一项目在本地运行良好。 我现在看到了MTA部署问题。 我的mta.yaml:

 #######基于模板版本0.2.0生成的mta.yaml
 ####### appName = maikeyserver
 ####### language = nodejs;  multiTenant =
 ####### approuter =

 _schema-version:'3.1'
 ID:maikeyserver
 版本:1.0.0
 描述:"许可证密钥管理服务"

 构建参数:
   之前:
    -建设者:自定义
      命令:
       -npm安装
       -CD建立/全部

 参数:
   启用并行部署:true

 模块:
  -名称:maikeyserver-ui
    类型:nodejs
    路径:应用
    参数:
      记忆体:256M
      磁盘配额:256M
    要求:
     -名称:srv-binding
       组:目的地
       特性:
         forwardAuthToken:true
         strictSSL:true
         名称:srv-binding
         网址:〜{srv-url}
     -名称:maikeyserver-uaa

  -名称:maikeyserver-srv
    类型:nodejs
    路径:gen/srv
    特性:
      退出:1#由deploy.js任务终止
    要求:
     -名称:maikeyserver-db-hdi-container
     -名称:maikeyserver-uaa
    提供:
     -名称:CAP服务使用者(例如approuter)所需的srv-binding#
       特性:
         srv-url:$ {default-url}

  -名称:maikeyserver-db
    类型:hdb
    路径:db
    参数:
      应用名称:maikeyserver-db
    要求:
     -名称:maikeyserver-db-hdi-container

 资源:
  -名称:maikeyserver-db-hdi-container
    类型:com.sap.xs.hdi-container
    参数:
      服务:尿
    特性:
      hdi-service-name:$ {service-name}
  -名称:maikeyserver-uaa
    参数:
      服务:xsuaa
      路径:xs-security.json
    类型:com.sap.xs.uaa 

1。 有人知道为什么我的处理程序中会在CF上收到此异常吗?

2。 应用程序的hdb模块是否应该正在运行? 当我部署mtar时,数据库模块似乎执行了部署步骤,其余的都停止了。

3。 在我的服务模块上,我必须将路径从简单的path:srv更改为path:gen/srv。 后者给我一个错误"在....处找不到*的CDS模型"。 我通过反复试验进行了更多更改,但不确定为什么现在可以使用。 谁能解释服务模块上的路径应该是什么?

干杯,曼努埃尔

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

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


死人专家

我已将CAP项目部署到CF(试用版)。 UI,服务模块,DB似乎正常工作。 我可以访问要获取数据的API。 到目前为止,一切都很好。

但是,每当我的自定义处理程序之一访问CDS事务时,都会出现以下错误:

在运行cds.transaction的行上

"预期查询目标,但未定义" 。 示例:

 2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0] OUT错误:预期为查询目标,但未定义
    2020-03-25T17:47:36.06 + 0100 Function.factory的[APP/PROC/WEB/0] OUT [自](/home/vcap/app/node_modules/@ sap/cds/lib/ql/index。  js:44:26)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在SELECT_ood_from(/home/vcap/app/node_modules/@sap/cds/lib/ql/index.js:99:30)处输出
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在Function.Object.assign._ [作为一体](/home/vcap/app/node_modules/@ sap/cds/lib/ql/index.js:103:68)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在Object.on上以[作为处理程序]输出(/home/vcap/app/srv/license-service.js:59:28)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在下一个(/home/vcap/app/node_modules/@sap/cds-services/lib/services/hooks/On.js:  185:37)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在On._middleware(/home/vcap/app/node_modules/@ sap/cds-services/lib/services/hooks/On。  js:214:5)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在Promise(/home/vcap/app/node_modules/@sap/cds-services/lib/services/hooks/On.js:  84:12)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在新的Promise中退出()
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在On.executeHandlerIfListed(/home/vcap/app/node_modules/@ sap/cds-services/lib/services/hooks/On。  js:83:12)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]在ApplicationService._actionsFunctionsHandlers(/home/vcap/app/node_modules/@sap/cds-services/lib/services/Service.js:  599:72)
    2020-03-25T17:47:36.06 + 0100 [APP/PROC/WEB/0]错误[2020-03-25T16:47:36.060Z | 错误|  1094159]:无法回滚:找不到客户端
 

示例处理程序:

 this.before('CREATE','Licenses',async(req)=> {
           /**
              *域模型尚无UNIQUE注释,因此此处理程序可以防止
              *与要创建的许可证ID相同的许可证
              *
              */
             const license =等待cds.transaction(req).run(
                 SELECT.one().from(许可证).where({license_ID:req.data.license_ID})
             )
             if(license!= null){
                 req.reject(409,`ID为$ {req.data.license_ID}的许可证已经存在`);
             }
         })

 

不访问cds.transaction的处理程序可以正常工作。 同一项目在本地运行良好。 我现在看到了MTA部署问题。 我的mta.yaml:

 #######基于模板版本0.2.0生成的mta.yaml
 ####### appName = maikeyserver
 ####### language = nodejs;  multiTenant =
 ####### approuter =

 _schema-version:'3.1'
 ID:maikeyserver
 版本:1.0.0
 描述:"许可证密钥管理服务"

 构建参数:
   之前:
    -建设者:自定义
      命令:
       -npm安装
       -CD建立/全部

 参数:
   启用并行部署:true

 模块:
  -名称:maikeyserver-ui
    类型:nodejs
    路径:应用
    参数:
      记忆体:256M
      磁盘配额:256M
    要求:
     -名称:srv-binding
       组:目的地
       特性:
         forwardAuthToken:true
         strictSSL:true
         名称:srv-binding
         网址:〜{srv-url}
     -名称:maikeyserver-uaa

  -名称:maikeyserver-srv
    类型:nodejs
    路径:gen/srv
    特性:
      退出:1#由deploy.js任务终止
    要求:
     -名称:maikeyserver-db-hdi-container
     -名称:maikeyserver-uaa
    提供:
     -名称:CAP服务使用者(例如approuter)所需的srv-binding#
       特性:
         srv-url:$ {default-url}

  -名称:maikeyserver-db
    类型:hdb
    路径:db
    参数:
      应用名称:maikeyserver-db
    要求:
     -名称:maikeyserver-db-hdi-container

 资源:
  -名称:maikeyserver-db-hdi-container
    类型:com.sap.xs.hdi-container
    参数:
      服务:尿
    特性:
      hdi-service-name:$ {service-name}
  -名称:maikeyserver-uaa
    参数:
      服务:xsuaa
      路径:xs-security.json
    类型:com.sap.xs.uaa 

1。 有人知道为什么我的处理程序中会在CF上收到此异常吗?

2。 应用程序的hdb模块是否应该正在运行? 当我部署mtar时,数据库模块似乎执行了部署步骤,其余的都停止了。

3。 在我的服务模块上,我必须将路径从简单的path:srv更改为path:gen/srv。 后者给我一个错误"在....处找不到*的CDS模型"。 我通过反复试验进行了更多更改,但不确定为什么现在可以使用。 谁能解释服务模块上的路径应该是什么?

干杯,曼努埃尔

付费偷看设置
发送
2条回答
小熊yu生菜
1楼 · 2020-08-21 17:13.采纳回答

嗨,

这很容易解决,请更换

 SELECT.one().from(许可证)

使用

 SELECT.one.from(许可)

提示:要使用查询API,您只需启动CDS REPL:

 cds r 

最好的问候,
大卫

95年老男孩
2楼-- · 2020-08-21 17:24

嗨大卫,

谢谢,成功了。

我有点困惑为什么带one()的版本在本地(在SQLite之上)工作。 这里的服务层是否根据基础数据库做出不同的反应?

最诚挚的问候,

Manuel

一周热门 更多>