SAP CAP篇十四:写个ERP的会计系统吧,Part I

本文目录

  • 本系列文章
  • 目标
  • 程序框架
  • 使用CDS CLI创建程序
  • 创建公司主数据
    • 数据库表设计
    • 初始数据
      • 初始数据:Country
      • 初始数据:Currency
      • 初始数据:Language
    • Service 定义
    • 生成Fiori App
    • App运行

本系列文章

SAP CAP篇一: 快速创建一个Service,基于Java的实现
SAP CAP篇二:为Service加上数据库支持
SAP CAP篇三:定义Model
SAP CAP篇四:为CAP添加Fiori Elements程序(1)
SAP CAP篇五:为CAP添加Fiori Elements程序(2)
SAP CAP篇六:为CAP添加Fiori Elements程序(3)
SAP CAP篇七:为CAP添加Fiori Launchpad入口 (Sandbox环境)
SAP CAP篇八:为CAP添加App Router并支持Fiori Launchpad (Sandbox环境)
SAP CAP篇九:升级为SAP CDS 7.0, CAP Java 2以及Spring Boot 3
SAP CAP篇十:理解Fiori UI的Annoation定义
SAP CAP篇十一:支持Media Object:图片、附件等
SAP CAP篇十二:AppRouter 深入研究
SAP CAP篇十三:拥抱TypeScript

目标

都说学习一门技术,最好的办法就是用这个技术实现一个目标。在整个的实现过程中,逢山开道,遇水架桥,才能更好地完成技术的“二八原理”。

所以,那就SAP CAP技术写一个ERP的会计系统。

功能列表如下(初步计划,随着开发的进行,会逐步细化):

  • 公司主数据
  • 会计科目表
  • 会计科目主数据
  • 会计凭证
  • 客户主数据
  • 供应商主数据
  • 固定资产主数据
  • 无形资产主数据
  • 会计报表:资产负债表
  • 会计报表:利润表
  • 会计报表:现金流量表

本文会注重在公司主数据。

程序框架

当然,SAP CAP的目标是Cloud Native的,但是Martin Flower在“Microservice Guideline”中也说“Monolith First”,详情参阅链接。

那就赶紧开始吧。

使用CDS CLI创建程序

创建CDS CLI来创建程序并安装各种dependence,命令如下:

cds init

然后,安装各种依赖。最终,package.json中关于dependencies如下:

  "dependencies": {"@sap/cds": "^7.5.2","@sap/xsenv": "^4.2.0","express": "^4.18.2"},"devDependencies": {"@cap-js/cds-typer": "^0.15.0","@cap-js/sqlite": "^1.4.0","@sap/ux-specification": "^1.120.2","@sapui5/ts-types": "^1.120.4","@types/jest": "^29.5.11","@types/node": "^20.11.5","@typescript-eslint/eslint-plugin": "^6.20.0","@typescript-eslint/parser": "^6.20.0","axios": "^1.6.5","eslint": "^8.56.0","jest": "^29.7.0","ts-jest": "^29.1.2","ts-node": "^10.9.2","typescript": "^5.3.3"},

具体的项目创建参阅SAP CAP篇十三:拥抱TypeScript 。

创建公司主数据

数据库表设计

从数据库层面来定义公司主数据。

namespace finsys.db;using {sap,cuid,Currency,Country
} from '@sap/cds/common';extend sap.common.Currencies with {// Currencies.code = ISO 4217 alphabetic three-letter code// with the first two letters being equal to ISO 3166 alphabetic country codes// See also:// [1] https://www.iso.org/iso-4217-currency-codes.html// [2] https://www.currency-iso.org/en/home/tables/table-a1.html// [3] https://www.ibm.com/support/knowledgecenter/en/SSZLC2_7.0.0/com.ibm.commerce.payments.developer.doc/refs/rpylerl2mst97.htmnumcode  : Integer;exponent : Integer; //> e.g. 2 --> 1 Dollar = 10^2 Centminor    : String; //> e.g. 'Cent'
}@cds.odata.valuelist
entity Companies: managed, cuid, sap.common.CodeList {    ParentCompany: Association to one Companies;Currency: Currency;Country: Country;Address: String(100);
}

其中:

  • ParentCompany:母公司
  • Currency:本位币
  • Country: 公司所属Country或地区
  • Address:公司具体地址信息

初始数据

运行下述命令来插入初始数据:

cds add data

该命令会自动在db文件夹下添加data文件夹,并为已有的数据库表生成csv文件。

初始数据:Country

文件sap.common-Countries.csv

code;name;descr
AU;Australia;Commonwealth of Australia
CA;Canada;Canada
CN;China;People's Republic of China (PRC)
FR;France;French Republic
DE;Germany;Federal Republic of Germany
IN;India;Republic of India
IL;Israel;State of Israel
MM;Myanmar;Republic of the Union of Myanmar
GB;United Kingdom;United Kingdom of Great Britain and Northern Ireland
US;United States;United States of America (USA)
EU;European Union;European Union

初始数据:Currency

文件sap.common-Currencies.csv

code;symbol;name;descr;numcode;minor;exponent
EUR;€;Euro;European Euro;978;Cent;2
USD;$;US Dollar;United States Dollar;840;Cent;2
CAD;$;Canadian Dollar;Canadian Dollar;124;Cent;2
AUD;$;Australian Dollar;Australian Dollar;036;Cent;2
GBP;£;British Pound;Great Britain Pound;826;Penny;2
ILS;₪;Shekel;Israeli New Shekel;376;Agorat;2
INR;₹;Rupee;Indian Rupee;356;Paise;2
QAR;﷼;Riyal;Katar Riyal;356;Dirham;2
SAR;﷼;Riyal;Saudi Riyal;682;Halala;2
JPY;¥;Yen;Japanese Yen;392;Sen;2
CNY;¥;Yuan;Chinese Yuan Renminbi;156;Jiao;1

初始数据:Language

文件sap.common-Languages.csv

code;name
de;German
fr;French
en;English
en_GB;British English

Service 定义

定义FinanceService

using { finsys.db as dbcommon } from '../db/schema';service FinanceService {entity Companies as projection on dbcompany.Companies;
}annotate FinanceService.Companies with @odata.draft.enabled;

生成Fiori App

通过Fiori: Open Application Geneator来创建Fiori App。

指定Service
项目描述

App运行

App运行如下:
App 运行
很粗略的一个程序,但是可用了。

后续的文章里面,会继续对这个App进行进一步增强。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/537614.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day57 动态规划part17● 647. 回文子串 ● 516.最长回文子序列● 动态规划总结篇

如果大家做了很多这种子序列相关的题目,在定义dp数组的时候 很自然就会想题目求什么,我们就如何定义dp数组。 布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j…

先进电气技术 —— 片上宽禁带器件的集成与应用

一、背景 功率转换器设计的一个关键目标是降低功率损耗以提高转换效率,这对可再生能源等应用产生影响。通过降低功率损耗,可以减小变换器元件的尺寸,从而使整个变换器的尺寸更小。因此,转换器的大小和成本完全取决于设计要求和应…

【C++】STL--String

这一节主要总结string类的常见接口,以及完成了string类的模拟实现。 目录 标准库的String类 string类常见接口 string类对象的常见构造 string析构函数:~string string类对象的容量操作 string类对象的访问及遍历操作 string类对象的修改操作 s…

防火墙中的SNAT 与DNAT

SNAT:让内网机器可以访问外网服务器 DNAT:让外网机器可以访问内网服务器 SNAT的原理 源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射 数据包从内网发送到公网时,SNAT会把数据包的源IP由私网IP转换成公网IP 当响应…

前端项目,个人笔记(一)【定制化主题 + 路由设计】

目录 1、项目准备 1.1、项目初始化 1.2、elementPlus按需引入 注:使用cnpm安装elementplus及两个插件,会报错:vueelement-plus报错TypeError: Cannot read properties of null (reading isCE ) ,修改: 测试&#…

旅游管理系统|基于SpringBoot+ Mysql+Java+Tomcat技术的旅游管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 用户功能 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 …

【MySQL】MySQL索引特性

文章目录 一、没有索引,可能会有什么问题二、认识磁盘1.MySQL与存储2.磁盘 三、MySQL与磁盘交互基本单位四、索引的理解五、索引操作1.创建主键索引2.创建唯一索引3.创建普通索引4.查询索引5.删除索引6.使用案例7.创建全文索引8.索引创建原则 一、没有索引&#xff…

前后端交互理解 简易表白墙(servlet)

前后端交互理解 简易表白墙(servlet) 文章目录 前后端交互理解 简易表白墙(servlet)后端核心内容前后端交互接口约定后端代码展示 上期介绍过 Servlet API ,本篇文章目的是借助 servlet 做出一个完整的网站。在一个网站…

GooGLE留痕助手是什么?#川圣SEO#蜘蛛池

baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? Google留痕助手,也被称为Google搜索留痕,是一种搜索引擎优化(SEO&#x…

线性代数 --- 特征值与特征向量(下)

特征值与特征向量 Eigen Values & Eigen Vectors Part III:如何求解特征向量与特征值 The Key Equation 对于一般矩阵A,如何找到他的特征值与特征向量? Step I: Find λ first! 首先,我们有方程: 但这里有两个未知数&…

【gpt实践】同时让chatgpt和claude开发俄罗斯方块

最近chatgpt和claude都在使用,其实大部分日常使用场景表现都没有相差太多,想搞一个有趣的小实验,如果同时让chatgpt和claude开发俄罗斯方块谁会表现的更好呢,说干就干! prompt 我选择了用英文描述,毕竟英…

图像处理与图像分析—图像统计特性的计算(纯C语言实现灰度值显示)

根据输入的灰度图像,分别计算图像的均值、方差等统计特征,并计算图像的直方图特征并以图形方式显示图像的直方图(用C或C语言实现)。 学习将会依据教材图像处理与图像分析基础(C/C)版内容展开 在上个笔记中&…