带有'@ sap/cds'版本3.x的CDS生成命令不会在SRV模块中放置'csn.json'

2020-08-26 18:52发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我已经重构了项目,以使用新的Cl...

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

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


我已经重构了项目,以使用新的Cloud Platform Application Programming Model。

我的项目结构看起来像这样:

 
   -hdb(数据库模块)
   -srv(服务模块)
   -ui(ui模块)
   -cdsrc.json
   -package.json
   -mta.yaml 

cdsrc.json:

 {
   "内部版本":{
     " target":"。",
     "任务": [
       {" src":" hdb"," for":" hana"," options":{" model":[" hdb"," srv"]}}},
       {" src":" srv"," for":" node-cf"," options":{" model":[" hdb"," srv"]}}
     ]
   }
 }
 

package.json:

 {
   " name":" <我的项目名称>",
   " description":"",
   " version":" 1.0.0",
   "引擎": {
     "节点":" ^ 8.9"
   },
   "文件":[
     " hdb",
     " srv"
   ],
   "依赖关系":{
     " @ sap/cds":" ^ 3.7.1",
     " express":" ^ 4.16.4",
     " hdb":" ^ 0.17.0"
   },
   " devDependencies":{
     " sqlite3":" ^ 4.0.8"
   },
   "脚本":{
     " start":" cds运行",
     " build":" cds build/all --clean",
     " deploy":" cds部署"
   },
   " cds":{
     "要求":{
       "D b": {
         " kind":" sqlite",
         "型号":[
           " hdb",
           " srv"
         ],
         "凭据":{
           "数据库":" sqlite.db"
         }
       }
     },
     "文件夹":{
       " db":" hdb",
       " srv":" srv"
     }
   }
 }
 

srv/package.json:

 {
     " name":" srv",
     "依赖关系":{
         " @ sap/cds":" ^ 3.7.1",
         " @ sap/xssec":" ^ 2.1.12",
         
     },
     "脚本":{
         " start":"节点server.js"
     },
     " cds":{
         "要求":{
             "D b": {
                 " kind":" hana",
                 " model":" gen/csn.json"
             }
         }
     }
 }
 

srv/server.js:

 const cds = require(" @ sap/cds");
 const express = require(" express");
//其他进口
 var app = express();

//其他中间件

 cds.connect();

 cds.serve(" gen/csn.json",{
         crashOnError:错误
     })
     .in(app)
     .catch((err)=> {
         console.log(err);
     });

 app.listen(port,()=> {
     console.info(`监听端口的应用程序:$ {port}`);
 });
 

当我在WebIDE中构建项目时,它会成功构建所有.cds文件,并将这样的输出写入控制台:

>  @ 1.0.0 build/hana/shared/HXE/xs/controller_data/executionagent/executionroot/269f9533-c450-4f35-ab0e-b62990473bb5/app/META-INF/.sap_java_buildpack/tomcat/temp/ builder/sap.cds.mta/builds/build-838087488308692914/<我的项目名称>
 > cds build/all --clean

 [cds]-cds [3.10.0],编译器[1.13.4],首页[/hana/shared/HXE/xs/controller_data/executionagent/executionroot/269f9533-c450-4f35-ab0e-b62990473bb5/app/META-INF /.sap_java_buildpack/tomcat/temp/builder/sap.cds.mta/builds/build-838087488308692914//node_modules/@sap/cds]

 [cds]-建筑项目[/hana/shared/HXE/xs/controller_data/executionagent/executionroot/269f9533-c450-4f35-ab0e-b62990473bb5/app/META-INF/.sap_java_buildpack/tomcat/temp/builder/sap.cds  .mta/builds/build-838087488308692914/],干净[true]

 [cds]-使用[Hana DB Module Builder]构建模块[hdb]
 [cds]-型号:hdb/ .cds,hdb/ .cds,

 [cds]-使用[Node CF Module Builder]构建模块[srv]
 [cds]-模型:模型:hdb/ .cds,hdb/ .cds,

 12:03:53 PM(DIBuild)
 [cds]-完成>将输出写入:
   hdb/src/gen/.hdinamespace
   hdb/src/gen/csv/<文件1> _ <实体1> .hdbcds
   hdb/src/gen/csv/<文件1> _ <实体2> .hdbcds
   hdb/src/gen/csv/<文件2> _ <实体1> .hdbcds
   ...
   srv/gen/csn.json
   srv/gen/_i18n/i18n.json

 [cds]-时间:2600.051ms

 CDS返回码:0
 

即使" cds build"命令会在" hdb/src/gen"和" srv/gen"文件夹中生成这些文件(我从SSH到安装了SAP Hana的matchine都通过SSH-ing看到了所有文件, 上面的输出:/hana/shared/HXE/xs/controller_data/executionagent/executionroot/269f9533-c450-4f35-ab0e-b62990473bb5/app/META-INF/.sap_java_buildpack/tomcat/temp/builder/sap.cds.mta/builds/build-838087488308692914/),它们不会显示在WebIDE的项目浏览器中。

当我构建数据库模块(hdb)时,它将工件正确部署到HDI容器中,并且我可以使用Database Explorer浏览该容器

但是运行" srv"模块会出现此错误:

 {错误:在gen/csn.json中找不到CDS模型
     在notFound(/hana/shared/HXE/xs/controller_data/executionagent/executionroot/2dff31be-8521-4d87-a173-f71c65f6b69c/app/node_modules/@sap/cds/lib/models/load.js:59:39)
     在EventEmitter.load(/hana/shared/HXE/xs/controller_data/executionagent/executionroot/2dff31be-8521-4d87-a173-f71c65f6b69c/app/node_modules/@sap/cds/cds/lib/models/load.js:10:50  )
     在_loadModel(/hana/shared/HXE/xs/controller_data/executionagent/executionroot/2dff31be-8521-4d87-a173-f71c65f6b69c/app/node_modules/@sap/cds/lib/runtime/serve.js:78:35)
     在<匿名>
     在runMicrotasksCallback(内部/进程/next_tick.js:122:5)
     在_combinedTickCallback(内部/进程/next_tick.js:132:7)
     在process._tickCallback(内部/进程/next_tick.js:181:9)
     在Function.Module.runMain(module.js:696:11)
     在启动时(bootstrap_node.js:225:16)
     在bootstrap_node.js:646:3代码处:'MODEL_NOT_FOUND',模型:'gen/csn.json'}
 npm ERR! 代码ELIFECYCLE
 npm ERR!  errno 1
 npm ERR!  serve @ start:`node server.js`
 npm ERR! 退出状态1
 npm ERR!
 npm ERR! 在serve @开始脚本处失败。
 npm ERR!  npm可能不是问题。 上面可能还有其他日志记录输出。


 npm ERR! 可以在以下位置找到此运行的完整日志:
 npm ERR! /hana/shared/HXE/xs/controller_data/executionagent/executionroot/2dff31be-8521-4d87-a173-f71c65f6b69c/app/.npm/_logs/2019-06-17T11_49_21_417_417Z-debug.log
 

当然," cds build"生成csn.json的路径与serve.js希望加载该模型的路径不同。 但是,不是将所有文件自动复制到" srv"模块执行根目录吗?

我当前的工作流程:

-使用VS Code在本地对CDS文件进行更改
-构建项目,因此它将生成csn.json
-提交更改并推送到Git存储库
-在WebIDE中提取更改
-CDS 构建,以便我可以将更改部署到数据库
-在运行" srv"模块之前,从本地生成的csn.json复制内容,将其粘贴到WebIDE的csn.json中,然后用CDS构建控制台中给定的路径替换路径 输出。

感谢您为解决该问题提供的帮助。
:)

5条回答
派大星 ヾ
2020-08-26 19:01

我已通过主package.json中的此hack解决了此问题:

" build":" cds build/all --clean; cp gen/srv/srv/csn.json srv/gen/; cp -r gen/db/src/gen db/src",
 

一周热门 更多>