• spec开发思路以及理解


    一、spec说明

    描述:编写SEPC采用创联公司自主开发的CIT语言,它是一种过程化的、类似数据库编码的语言。SPEC中除了关键字外提倡使用中文。

    理解:可以理解为业务逻辑层。链接前台页面和后台数据库

    设计阶段:
    业务逻辑的输入与输出(是谁?要怎么判断是谁操作?’标识、类型、级别、内容‘,也可以是页面需求的字段:修改时候的字段,删除时候的id,查看时候的条件)
    所涉及的数据表结构(字段输出需要几张表才有你想要数据,’关联的表,“用到的表”‘)
    处理实现
    1.调用(可无)
    2.要不要用的临时表与临时变量(可无)
    3.输入检查(可无)
    4.预处理(可无)
    5.前校验(可无)
    6.处理(必须要,处理逻辑,可以说是关键数据库语句)

    准备阶段:
    1.IO定义:将’描述‘下的输入和输出定义在IO文件夹下相应的表中
    2.静态数据结构:关联相对应的表
    3.宏定义:在Spec2Code下配置在IO定义的路径,定义BASE文件下
    4.自定义函数

    书写阶段:
    交易编号(QU为SPEC的类型,sy为子系统的标识,SMD0057为数字序号)
    QUSYSMD0057(设计IO内部输入输出的的标号相同,一般直接用于当文件名,生成文件时候要在前面加上SPEC,可自定义,要注意命名规范)
    (QU查询,SY系统,SMD,0057编号)

    (bk:预约管理、im:主数据、oa:oa模块、od:销售管理、pd:生产管理、ps:采购管理、qs:质量管理、st:库存管理)



    交易名(任何一个种类的SPEC都有英文名称和中文名称,英文名称的前四位有一定的规则,同交易编号的前四位。)
    QUSYSMD_SysMaterialShareUnitQry(设计IO内部输入输出的的标号相同,可自定义,要注意命名规范)
    物料共享管理单元列表查询(设计IO内部输入输出的的标号相同,可自定义,要注意命名规范)

    描述 (红色为注解)
    主要处理如下:(接收传送过里的数据)

    输入输出变量如下:(根据IO配置来写,IO配置INO则为输入,OUTO则为输出)
    当没有明细名称时:
    输入.(配置字段名称,’中文‘) 例如: 输入.操作员标识
    当有明细名称时:
    输入明细.(明细名称下的字段).(字段名称下的字段) 例如:输入明细.订单明细.卷烟标识
    输出.(配置字段名,’中文‘)

    静态数据(罗列本SPEC中所使用到的静态数据结构的名称。应用到的数据库表)(可以说是数据库中表)

    调用 (罗列本SPEC对象所调用的其它SPEC对象。)

    临时表(罗列本SPEC中使用的临时表的名称。)(一些临时表,用于临时调用,用完清除数据,但没有清除表结构)

    临时变量(对本SPEC中使用的所有临时变量进行定义。)(相当于在java定义一个变量或者数组等,之后再进行赋值)

    输入检查(对定义输入参数的逻辑检查,包含判断不允许为空的输入是否为空,输入的值是否在预定的范围。)(对于传过来的数据进行校对,错误直接停止执行spec编译后的java和IO,降低资源消耗)

    预处理(在正式进行处理前需要预先准备的逻辑,如对变量赋初始值或是对输入的标识能否查询到相应的记录,当前是否允许进行此SPEC定义的操作等。) 

        (spec文档的sql有个局限性,无法进行sql套用,导致只能将一个表数据放到临时表再进行调用;以及将一些条件值赋给临时变量)

    前校验(未启用)

    处理(实质的逻辑处理过程,如数据更新,结果返回。) (进行中文sql的书写,编译后能进行中文sql的转变对应的oracle、db、server三种格式的数据库sql语句,再进数据查询返回)

    代码生成阶段:如果改了配置文件则要重新加载资源,在生成文件

    调试阶段:

    个人领悟理解:
    1.交易TX、公共模块CF、查询QU、存储过程SP,所有的对象都以文本文件(.txt)方式保存。
    2.TX、QU可以被展现控制层调用,对于框架中出现中文的空格会导致编译报错是一大弊端。
    3.IO对象说明:
    列数:顺序号,从1开始,必须连续;
    字段属性:表示输入(IN0)、输出(OUT0);
    字段名称:中文名称
    字段标识:英文名称
    字段类型:数据类型
    字段长度:数据长度
    明细数量:明细的输入参数个数
    明细名称:明细数组的中文名称
    明细标识:明细数组的英文名称
    明细最大数:数组的长度极大值
    4.静态数据结构:数据库表结构的定义。(就可以说是数据库字段设计说明)
    使用字段方法:表名字(中文).字段中文名称(中文) 例如:订单主表.订单标识
    5.宏定义:(对于一些自定义、字典设计、还有列表) 使用: 维护标记.新增 第三段.第五段
    6.内部结构图:必须要要有,无论是否有字段(可以理解为固定框架)
    7.sql语句的理解:对于关键字还是固定,但是关联、表名、需求字段等都是用数据库表中的字段中文名,对于最后的一个分号则用对应语句前加上END,如:INSERT---ENDINSERT
    8.DUMP与ERROR语句放在一起时,DUMP要在ERROR之前,否则ERROR执行以后程序就退出了,执行不到DUMP语句。
    9. WHERE 查询条件
    OPTION 参数条件(新的知识)
    WITH 查询条件
    ENDOPTION
    OPTION一般在WHERE子句后使用,使用效果相当于在WHERE子句后按变量的值拼结条件
    例子:
    WHERE A.是否可用 = "1"
    OPTION 输入.检索类型 = "01" AND 输入.检索内容 <> ""
    WITH AND a.姓名 LIKE "%" UNIONSTR 输入.检索内容 UNIONSTR "%"
    ENDOPTION

     

     二、spec图片截图解析:

     

     

     

     

     

    spec文档例子: 

    交易编号
    QUSCMST0051

    交易名
    QUSCMST_StorUUIDQuery
    出入库单据标识查询


    描述
    主要处理如下:
    //TC

    输入输出变量如下://单据类型 P1213采购入库单 P1224销售出库单
    输入.出入单标识
    输入.单据类型

     


    静态数据
    采购入库单主表
    销售出库单主表



    调用

    临时变量
    单据类型编码 TYPEAS 输入.出入单标识

    临时表


    输入检查
    IF 输入.出入单标识 = ""
    DUMP 输入.出入单标识
    ERROR ENULL
    ENDIF
    IF 输入.单据类型 = ""
    DUMP 输入.单据类型
    ERROR ENULL
    ENDIF

    预处理
    IF 输入.单据类型 = "P1231"
    临时变量.单据类型编码 = "50957179015fc0a812fED552"
    ENDIF

    IF 输入.单据类型 = "P1232"
    临时变量.单据类型编码 = "509571790a812fd463ED552"
    ENDIF


    前校验

    处理
    //采购入库单
    IF 输入.单据类型 = "P1231"
    QUERY
    SELECT A.入库单标识 AS InStorUUID
    ,临时变量.单据类型编码 AS DataCode
    FROM 采购入库单主表 AS A
    WHERE A.是否可用 = "1"
    AND A.来源单据标识 = 输入.出入单标识
    AND A.业务类型 LIKE "B071%"
    ENDQUERY
    ENDIF


    //采购入库单
    IF 输入.单据类型 = "P1232"
    QUERY
    SELECT A.出库单标识 AS OutStorUUID
    ,临时变量.单据类型编码 AS DataCode
    FROM 销售出库单主表 AS A
    WHERE A.是否可用 = "1"
    AND A.来源单据标识 = 输入.出入单标识
    AND A.业务类型 LIKE "B072%"
    ENDQUERY
    ENDIF

     

    三、系统框架,与现在市面的逻辑基本不一样,但是后台进行了封装。如下图:

     

     

    四、将spec转化成对应的Io和java流程:

    有什么问题的请大家多多指教

    @name:李观森

    @weixin :18312717936

    @qq :860849503     

     

     

  • 相关阅读:
    [51nod] 1301 集合异或和
    [BZOJ] 1088: [SCOI2005]扫雷Mine
    [LUOGU] P4251 [SCOI2015]小凸玩矩阵
    8.21模拟赛
    [BZOJ] 3163: [Heoi2013]Eden的新背包问题
    [BZOJ] 1001: [BeiJing2006]狼抓兔子
    【NOIP2017提高A组冲刺11.8】好文章
    [BZOJ] 1520: [POI2006]Szk-Schools
    [BZOJ] 1877: [SDOI2009]晨跑
    day23(事务管理)
  • 原文地址:https://www.cnblogs.com/lgs-19/p/7765355.html
Copyright © 2020-2023  润新知