寻找使用节点js模块导入和导出CSV文件Hana 2.0 xsa的方法

2020-08-20 06:47发布

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

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


专家们,

在sap hana 2.0 sp04 XSA中寻找App开发

我的应用程序是使用NodeJS模块上传和下载Excel工作表或导入或导出Excel工作表

通过提供一些用于节点JS模块开发的代码可以提供任何帮助

此致

B N Kartheek

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

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


专家们,

在sap hana 2.0 sp04 XSA中寻找App开发

我的应用程序是使用NodeJS模块上传和下载Excel工作表或导入或导出Excel工作表

通过提供一些用于节点JS模块开发的代码可以提供任何帮助

此致

B N Kartheek

付费偷看设置
发送
2条回答
愤怒的猪头君
1楼 · 2020-08-20 07:25.采纳回答

HANA7 openSAP课程有一个示例,其中我们在Node.js中进行Excel下载:
https://github.com/SAP-samples/hana-xsa-opensap-hana7/blob/hana2_sps04/srv/router/routes/excel.js

我从我的团队使用的内部工具中获得了另一个示例(因此它不在公开的github存储库中)。 它可以批量导出和导入整个容器。 这只是应用程序执行导出和导入的部分:

/* eslint no-undef:0 */
 "使用严格";
 module.exports =函数(应用){

/**
 * @swagger
 *
 */srv_api/admin:
 *得到:
 *摘要:测试管理员端点
 *标签:
 *-管理员
 *回应:
 *'200':
 *说明:管理员功能
 */
 app.get('/admin',函数(req,res){
 如果(req.authInfo!==未定义&& req.authInfo.checkLocalScope(" Admin")){
 返回res.send('管理功能')
 }其他{
 返回res.type(" text/plain")。status(401).send("错误:未授权。缺少管理范围")
 }
     })
    
/**
 * @swagger
 *
 * 组件:
 *模式:
 *表格:
 *类型:对象
 *属性:
 * TABLE_NAME:
 *类型:字符串
 */

/**
 * @swagger
 *
 */srv_api/admin/tables:
 *得到:
 *摘要:获取TeamTask模式中所有表的列表
 *标签:
 *-管理员
 *回应:
 *'200':
 *说明:所有表的列表
 *内容:
 * application/json:
 *模式:
 *类型:数组
 *项:
 * $ ref:'#/components/schemas/Table'
 *'401':
 *说明:错误未授权。 缺少管理员范围
 *'500':
 *说明:常规DB错误
 */
 app.get("/img/admin/tables",异步(req,res)=> {
 如果(req.authInfo!==未定义&& req.authInfo.checkLocalScope(" Admin")){
 尝试{
 const dbClass = require(global .__ base +" utils/dbPromises")
 让dbConn =新的dbClass(req.db)
 const语句=等待dbConn.preparePromisified(
 `从M_TABLES中选择SELECT_TABLE_NAME
 哪里SCHEMA_NAME = CURRENT_SCHEMA
 AND RECORD_COUNT> 0`
 )
 const结果=等待dbConn.statementExecPromisified(statement,[])
 返回res.type(" application/json")。status(200).send(JSON.stringify(results))
 } catch(err){
 返回res.type(" text/plain")。status(500).send(`ERROR:$ {err.toString()}`)
 }
 }其他{
 返回res.type(" text/plain")。status(401).send("错误:未授权。缺少管理范围")
 }
 });

/**
 * @swagger
 *
 */srv_api/admin/export:
 *得到:
 *摘要:在ZIP文件中将所有表内容导出为JSON
 *标签:
 *-管理员
 *回应:
 *'200':
 *说明:ZIP文件中所有表的内容均为JSON
 *内容:
 *应用程序/邮政编码:
 *模式:
 *类型:字符串
 *格式:二进制
 *'401':
 *说明:错误未授权。 缺少管理员范围
 *'500':
 *说明:常规DB错误
 */
 app.get("/img/admin/export",异步(要求,要求)=> {
 如果(req.authInfo!==未定义&& req.authInfo.checkLocalScope(" Admin")){
 尝试{
 const dbClass = require(global .__ base +" utils/dbPromises")
 让dbConn =新的dbClass(req.db)
 const语句=等待dbConn.preparePromisified(
 `从M_TABLES中选择SELECT_TABLE_NAME
 哪里SCHEMA_NAME = CURRENT_SCHEMA
 AND RECORD_COUNT> 0`
 )
 const结果=等待dbConn.statementExecPromisified(statement,[])
 let zip =新的require(" node-zip")();
 为(让结果的结果){
 const statementMain =等待dbConn.preparePromisified(`SELECT * FROM $ {result.TABLE_NAME}`)
 const resultsMain =等待dbConn.statementExecPromisified(statementMain,[])
 zip.file(`$ {result.TABLE_NAME} .json`,JSON.stringify(resultsMain))
 }
 让数据= zip.generate({
 base64:否,
 压缩:" DEFLATE"
 });
 res.header(" Content-Disposition","附件; filename = TeamTaskExport.zip");
 返回res.type(" application/zip")。status(200).send(Buffer.from(data," binary"));
 } catch(err){
 返回res.type(" text/plain")。status(500).send(`ERROR:$ {err.toString()}`)
 }
 }其他{
 返回res.type(" text/plain")。status(401).send("错误:未授权。缺少管理范围")
 }
 });

/**
 * @swagger
 *
 */srv_api/admin/import:
 *发布:
 *摘要:在ZIP文件中将所有表内容作为JSON导入
 *标签:
 *-管理员
 * requestBody:
 *说明:上传的zip文件(表以JSON格式)
 *必填:true
 *内容:
 *应用程序/邮政编码:
 *模式:
 *类型:字符串
 *格式:二进制
 *回应:
 *'201':
 *说明:所有数据均已成功上传
 *'401':
 *说明:错误未授权。 缺少管理员范围
 *'500':
 *说明:常规DB错误
 */
 让bodyParser = require('body-parser')
 var zipParser = bodyParser.raw({
 类型:" application/zip"
 })
 app.post('/admin/import',zipParser,异步(req,res)=> {
 如果(req.authInfo!==未定义&& req.authInfo.checkLocalScope(" Admin")){
 尝试{
 let zip = new require('node-zip')(request.body,{
 base64:否,
 checkCRC32:是的
 });
 const cds = require(" @ sap/cds")
 const srv =等待cds.connect.to('db')

 const dbClass = require(global .__ base +" utils/dbPromises")
 让dbConn =新的dbClass(req.db)
 const语句=等待dbConn.preparePromisified(
 `从M_TABLES中选择SELECT_TABLE_NAME
 SCHEMA_NAME = CURRENT_SCHEMA`
 )
 const结果=等待dbConn.statementExecPromisified(statement,[])
 为(让结果的结果){
 如果(zip.files [`$ {result.TABLE_NAME} .json`]!==未定义){
 让inputData = JSON.parse(zip.files [`$ {result.TABLE_NAME} .json`] ._ data)
 const deleteStatement =等待dbConn.preparePromisified(`从$ {result.TABLE_NAME}中删除)
 等待dbConn.statementExecPromisified(deleteStatement,[])
 等待srv.run(INSERT.into(result.TABLE_NAME).entries(inputData))
 }
 }
 res.status(201).end(`所有表已导入`)
 } catch(err){
 返回res.type(" text/plain")。status(500).send(`ERROR:$ {JSON.stringify(err)}`)
 }

 }其他{
 返回res.type(" text/plain")。status(401).send("错误:未授权。缺少管理范围")
 }
 })

 }; 
微wx笑
2楼-- · 2020-08-20 07:23

感谢Allot Mr.Thoms Jung

很高兴收到您的来信,我会继续讲这个尾声

此致

B N Kartheek

一周热门 更多>