*数据字典和枚举值

在核心系统应用开发中,数据字典有举足轻重的作用。数据字典是对系统中所有字段的归纳抽象,需要规范同类字段的类型长度,方便定义和修改。
    但是,在过去的核心系统中,数据字典的理解往往也会有失误。常见的错误方法,是试图穷举定义所有可以出现的字段名字。可是实际上核心系统应用程序内容是不断扩充的,功能和交易程序都在不停增加,所用到的字段也是无穷无尽。如果需要列举的是所有字段,就像建巴比伦塔一样困难。而且不可避免会出现账号1到账号9这样的重复。
    在Firebird系统中,数据字典的使用方式回归了本源意义,即数据字典定义的是不重复的字段基础类型。举例来说,“日期”就是一个基础类型,归数据字典管理。而“交易日期”,“开户日期”这些字段,都只是使用基础类型定义出来的具体字段变量,不归集到数据字典管理,但命名上要求具体字段必须以数据字典基础类型结尾,体现归属关系。“日期”在数据字典里定义的是WKDT,“开户日期”起名可以叫OPWKDT,“交易日期”起名可以叫TRWKDT,不同场景中也可以起名不一样。这样的数据字典和字段命名规则,既满足应用系统字段的不断扩充,又保持数据字典的精简和稳定。

数据字典的实现方式,是建立一个DICT的PF文件并编译,里面的内容即是所有基础类型的定义。摘录部分如下所示。

  1. A R RDICT
  2. A*长度 L
  3. A @@WKDT L TEXT('日期')
  4. A
  5. A*长度 T
  6. A @@WKTM T TEXT('时间')
  7. A
  8. A*长度 Z
  9. A @@TMSP Z TEXT('时间戳')
  10. A
  11. A*长度 1A
  12. A @@CHAR 1A TEXT('字符')
  13. A @@YNFG 1A TEXT('是否标志')
  14. A* 1 是 YES
  15. A* 0 否 NO
  16. ......
  17. A*长度 3P
  18. A @@EXSQ 3P 0 TEXT('执行序号')
  19. A*长度 4A
  20. A @@SMCD 4A TEXT('摘要代码')
  21. A @@ITCD 4A TEXT('核算代码')
  22. A @@CSCD 4A TEXT('现金项目代码')
  23. ......

为了与实际应用程序中的字段名区分,数据字典中的基础类型字段名以@@开头。

在表结构PF字段定义,通用结构定义,交易、组件输入输出接口PF字段定义时,就可以参照数据字典了。
    以尾箱凭证登记表ACNVCBB为例展示如下。

  1. A UNIQUE
  2. A REF(DICT)
  3. A R RACNVCBB
  4. A BKBRNO R REFFLD(@@BRNO)
  5. A TEXT('机构号')
  6. A COLHDG('机构号')
  7. A BKBXNO R REFFLD(@@BXNO)
  8. A TEXT('尾箱号')
  9. A COLHDG('尾箱号')
  10. A BKVCTP R REFFLD(@@VCTP)
  11. A TEXT('凭证种类')
  12. A COLHDG('凭证' '种类')
  13. A VBMDNU R REFFLD(@@MDNU)
  14. A TEXT('凭证张数')
  15. A COLHDG('凭证' '张数')
  16. A BKSTCD R REFFLD(@@STCD)
  17. A TEXT('记录状态')
  18. A COLHDG('记录状态')
  19. A K BKBRNO
  20. A K BKBXNO
  21. A K BKVCTP

以尾箱主表ACNBXBX为例展示如下。

  1. A UNIQUE
  2. A REF(DICT)
  3. A R RACNBXBX
  4. A BKBRNO R REFFLD(@@BRNO)
  5. A TEXT('机构号')
  6. A COLHDG('机构号')
  7. A BKBXNO R REFFLD(@@BXNO)
  8. A TEXT('尾箱号')
  9. A COLHDG('尾箱号')
  10. A VCACNO R REFFLD(@@ACNO)
  11. A TEXT('凭证账号')
  12. A COLHDG('凭证' '账号')
  13. A BKTLNO R REFFLD(@@TLNO)
  14. A TEXT('柜员号')
  15. A COLHDG('柜员号')
  16. A EQYNFG R REFFLD(@@YNFG)
  17. A TEXT('碰平标志')
  18. A COLHDG('碰平' '标志')
  19. A OPBRNO R REFFLD(@@BRNO)
  20. A TEXT('创建机构')
  21. A COLHDG('创建' '机构')
  22. A OPDPNO R REFFLD(@@DPNO)
  23. A TEXT('创建部门')
  24. A COLHDG('创建' '部门')
  25. A OPTLNO R REFFLD(@@TLNO)
  26. A TEXT('创建柜员')
  27. A COLHDG('创建' '柜员')
  28. A OPWKDT R REFFLD(@@WKDT)
  29. A TEXT('创建日期')
  30. A COLHDG('创建' '日期')
  31. A OPWKTM R REFFLD(@@WKTM)
  32. A TEXT('创建时间')
  33. A COLHDG('创建' '时间')
  34. A MTBRNO R REFFLD(@@BRNO)
  35. A TEXT('修改机构')
  36. A COLHDG('修改' '机构')
  37. A MTDPNO R REFFLD(@@DPNO)
  38. A TEXT('修改部门')
  39. A COLHDG('修改' '部门')
  40. A MTTLNO R REFFLD(@@TLNO)
  41. A TEXT('修改柜员')
  42. A COLHDG('修改' '柜员')
  43. A MTWKDT R REFFLD(@@WKDT)
  44. A TEXT('修改日期')
  45. A COLHDG('修改' '日期')
  46. A MTWKTM R REFFLD(@@WKTM)
  47. A TEXT('修改时间')
  48. A COLHDG('修改' '时间')
  49. A BKSTCD R REFFLD(@@STCD)
  50. A TEXT('记录状态')
  51. A COLHDG('记录' '状态')
  52. A K BKBRNO
  53. A K BKBXNO

从上面的例子可以看出,PF定义中首先要REF(DICT)引入数据字典,然后定义具体字段时候,REFFLD指明数据字典的基础类型字段。注意的是命名规范要求,具体字段的后4位必须和数据字典基础字段名字一致。这样在程序中可以轻松认出是哪种类型(这就是应用型匈牙利命名法,有关匈牙利命名法的误解和讨论参见《软件随想录 -- Joel on software》的第23章“让错误的代码显而易见”)。不同的PF字段名字可能会一样,因此在RPG程序中需要QUALIFIED防止重叠,这在后续“命名限定”时候再介绍。

那么如果在RPG程序中需要参照数据字典定义变量该怎么写呢。这里就需要使用一个新的关键字TEMPLATE,它可以引入一个PF结构但并不分配存储空间。同样让例子程序说话。

  1. **********************************************************************
  2. **公共结构
  3. **引入数据字典
  4. DDICT E DS EXTNAME(DICT) QUALIFIED TEMPLATE
  5. *************************
  6. **临时变量结构
  7. DD_VARS DS
  8. **定义参照数据字典(LIKE)的变量 
  9. D V_BKBRNO LIKE(DICT.@@BRNO)
  10. D V_EQYNFG LIKE(DICT.@@YNFG)
  11. **定义无法参照的临时变量 
  12. D V_NUM 5P 0
  13. **********************************************************************

先是D段定义了DICT,引入外部PF结构DICT,并且是QUALIFIED限定为以点访问字段,TEMPLATE指明只声明不分配空间,然后定义变量时就可以用LIKE了。

数据字典除了定义了字段类型长度,还对枚举项列表进行了管理。比如数据字典例子中,@@YNFG就是一个枚举,1表示是,0表示否。在尾箱主表的EQYNFG碰平标志就是用了这个枚举。在程序中如果写0,1的话,既不便于阅读程序,也不方便枚举值的变化。因此,Firebird中根据DICT自动生成了ENUM这个枚举列表,这样RPG程序中就可以用YNFG_YES代表1,YNFG_NO代表0。摘录DSCPPGM/ENUM这个RPGLE源码部分如下。

  1. **BEGIN***************************************************************
  2. **程序名称:数据字典枚举值 *
  3. **功能描述:数据字典枚举值常量定义 *
  4. ** *
  5. **版本:2014-11-08_1 *
  6. ** *
  7. **设计人员:PACMAN 开发人员:AUTOGEN *
  8. **设计日期:2011-08-30 开发日期:2011-08-30 *
  9. ** *
  10. **END*****************************************************************
  11. **
  12. *是否标志:是YES
  13. D YNFG_YES C CONST('1')
  14. *是否标志:否NO
  15. D YNFG_NO C CONST('0')
  16. *
  17. *借贷标志:借方DEBIT
  18. D DCFG_DEBIT C CONST('1')
  19. *借贷标志:贷方CREDIT
  20. D DCFG_CREDT C CONST('2')
  21. *
  22. *记录状态:正常NORMAL
  23. D STCD_NORML C CONST('1')
  24. *记录状态:删除ABNORMAL
  25. D STCD_ABNML C CONST('2')
  26. *

在RPG程序中,通过D/COPY DSCPPGM,ENUM 即可引入数据字典枚举常量。之后就可以 EVAL V_EQYNFG=YNFG_YES 这么写了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/283313/viewspace-1992224/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/283313/viewspace-1992224/

AS400银行核心系统开发中的技术总结--数据字典和枚举值相关推荐

  1. 银行核心系统入门简介

    文章来源与某位大神的力作,写的非常好,科目的地方首位科目号有待商榷,但总之看完后很多东西一目了然. 银行核心系统入门简介 本文的目标读者是准备从事银行核心系统开发.维护的从业人员.请注意,是" ...

  2. 银行核心系统软件开发 转

    http://sns.cio360.net/b/6_100140_178.html 银行核心系统 入门简介    科目常识    资产类科目的处理    负债类的科目处理办法    所有者权益 处理方 ...

  3. 腾讯云发布金融国产化战略、《腾讯云银行核心系统分布式转型白皮书》

    5月11日,在腾讯金融云国产化战略峰会上,腾讯云发布金融国产化战略:腾讯云将持续加大技术投入打造新一代国产化精品产品,并依托产品构建全栈领先的国产数字化基座.同时,腾讯云还将携手伙伴,共同构建国产数字 ...

  4. 支付业务与技术架构学习总结(9)——银行核心系统之清算体系

    支付清算系统是经济金融活动的基础性支撑.支付.清算体系建设是金融理论与实践的重点课题.本文主要描述了支付系统建设的发展历程及构成,分析了银行内部清算体系设计,有利于快速建立起金融服务体系思路.希望略尽 ...

  5. 银行核心系统服务器,银行核心系统之技术架构(一).pdf

    银行核心系统之技术架构 目录 前言 3 1.此文适合人群: 3 2.此文解决问题: 3 3.此文分为三部分: 3 1.主机时代 3 (1)单体架构4 (2)操作系统(z/OS) 4 (3)命令输入处理 ...

  6. linux服务器可用处理核心,linuxOne是采用什么架构或者技术来保障银行核心系统对于可靠性极高要求?...

    LinuxONE依托主机三大战略设计核心理念,全面继承主机成熟和先进的技术:可靠性,可用性和可维护性(RAS): 业务连续可用:安全性,最大程度保障银行核心系统的可靠稳定,LinuxONE硬件平台已连 ...

  7. 银行核心系统之应用集成

    银行核心系统之应用集成 云技术 10月8日 以下文章来源于小代嘚吧嘚 ,作者代堂鸣 小代嘚吧嘚 欢迎加入银行核心系统大本营,用讲故事的方式给银行业务加点料,用项目管理的方法来改进工作和生活! 本文共7 ...

  8. 国内银行核心系统建设情况调研报告

    国内银行核心系统建设情况调研报告 前言 核心业务系统,也称为综合业务系统,是银行信息化建设的核心部分,是银行业务经营的基础.随着世界金融环境的不断向前发展,拥有稳健.灵活.安全.可靠的核心业务系统是体 ...

  9. goldendb与mysql_GoldenDB ,一个已经全面支撑银行核心系统的国产数据库

    摘要:沿用.并存还是替代,一直是银行核心系统数据库转型重点思考的问题.四大行目前主要采用的是沿用与并存的数据库产品战略,在确保稳定的大前提下对新兴数据库技术进行探索研究和实践.相对而言,股份制银行在这 ...

最新文章

  1. C错误异常处理,异常处理
  2. python网络编程及高并发问题
  3. Oracle字符分隔函数(split)
  4. 市值蒸发4460亿美元、股价下跌10%,苹果泡沫终于来了!
  5. 福利好礼现金大奖等你来→首届 .NET Conf China Hackathon 火热报名中!
  6. [Abp 源码分析]多语言(本地化)处理
  7. Spring查找方法示例
  8. Linux 内核红黑树分析
  9. python文本数据处理_python 数据处理 对txt文件进行数据处理
  10. HBuilderx中编译sass文件
  11. Mac下关于ssh命令的简化
  12. 用C语言实现计算器功能
  13. AppData、Roaming、Locallow等文件夹中常见大文件夹有哪些、有什么用以及如何清理方法参考资料
  14. 拯救者Y7000拆机清灰方法及加装机械硬盘
  15. 模拟电子技术 项目课 多种波形发生器(方波、三角波、正弦波)
  16. 内连接外连接全连接(简单实例)
  17. 59 Three.js 渲染两个场景和使用不同的相机,渲染在一个场景里面
  18. 电商API接口获取商品详情数据
  19. 双指数边缘平滑滤波器用于磨皮算法的尝试。
  20. 然而沼跃鱼早就看穿了一切

热门文章

  1. dev sda2 linux lvm,记录linux LVM 扩容硬盘空间的记录
  2. 基于JavaFX的类QQ的聊天工具
  3. 7-12 约分最简分式
  4. 911S5正式谢幕后 如何找到一个好用的替代品
  5. 外呼系统线路不稳定,经常封号怎么办?
  6. 喜报!昂视荣获深圳市「专精特新」中小企业认定
  7. CTF训练 SSH服务(1)
  8. Vercel 配置服务端代理
  9. 国企深度揭秘 | 移动总部网络事业部
  10. html5 当中nav怎么用,html5中nav标签的使用