zoukankan      html  css  js  c++  java
  • Samsara v2.0 打造ERP数据流脚本编程 —— 脚本规范

     

    Samsara v2.0 打造MIS数据流脚本编程 —— 脚本规范(初稿)

     

    简介:

    MIS很大一部份是数据库的编程,例如订单生成到货单、入库单、日志、修改数据库等。

    这些操作基本上都是基于表单信息,例如到货单信息来自订单 + 部分界面输入。

    以往,使用代码做这中“赋值”非常的麻烦,如果涉及到了数学运算更加麻烦。

    例如计算商品售价 = (商品税率+1)*商品到货金额 等等。。。。

    现在使用Samrara提供的脚本编程,能够很容易的完成各种复杂并且“无聊”的表单赋值运算。


    入门:

    一个基于Table2生成Table1的例子:

    EXCHANGER TABLE1 T1
    {
    NUM:COLUMN1 = TABLE2.COLUMN1 * 0.11
    NUM:COLUMN2 = TABLE2.COLUMN2 + TABLE2.COLUMN3
    COLUMN3 = DEMOTEST
    }

    这样table1的字段column1/column2/column3就可以通过table2计算出来了。

    用户只要给出table2的数据,通过samrara的脚本运算,能够得到需要的table1数据。

    脚本规范细则:

    Samrara v2.0版本一共包括7大模块,分2类。
    数据提供模块:EXCHANGER, SPLITTER, LOADER
    流转控制模块:IFER, SWITCHER, CHANNEL
    channel为流转组织中心,他对其余6大模块进行组织,完成各种逻辑。



    Exchanger

    EXCHANGER [TABLENAME] [IDENTIFIER]
    {
    [COLUMNTYPE:][COLUMNNAME] = [EXPRESSION,]
    }

    EXCHANGER TABLE1 T1
    {
    NUM:COLUMN1 
    = TABLE2.COLUMN1 + MAX(TABLE3.COLUMN1) + SYS.SERIAL + @TIME
    }

    功能:
    完成各种运算赋值。

    后续连接符号:
    NEXT


    表达式标记:
    [TABLENAME].[COLUMNNAME]. 如TABLE1.COLUMN1: 取自表的值
    [@MARK]. 如@PERSON: 取自此mark代表的值
    SYS.[type].如SYS.SERIAL:取自系统默认值,包括:SYS.NULL/SYS.SERIAL/SYS.DATETIME/SYS.PK.TABLENAME.COLUMNNAME


    其他:
    COLUMNTYPE = NUM/STR/BOOL/NBOOL.指定表达式的类型,分别对应数字、字符、布尔、数字运算布尔
    函数 = MAX/MIN/AVERAGE/COUNT/POWER。。。等。


    SPLITER

    SPLITER [TABLENAME] [IDENTIFIER]
    {
    [COLUMNTYPE:][COLUMNNAME] = [EXPRESSION,]
    }

    SPLITER TABLE1 S1
    {
    NUM:COLUMN1 
    = TABLE1.COLUMN1 / 2,
    COLUMN2 
    = TABLE2.COLUMN2
    }

    功能:
    功能同EXCHANGER。

    与EXCHANGER区别:
    EXCHANGER是在原数据基础上运算,即原来存在table1,那么在原table1数据基础上进行运算然后返回给TABLE1
    SPLITER在元数据基础上运算后生成一个新的副本取代原数据。

    后续连接符号:
    OLD/NEW/NEXT


    其他:
    COLUMNTYPE和函数功能同上。


    LOADER


    LOADER [TABLENAME] [IDENTIFIER]
    {
    SQL 
    = [EXPRESSION],
    [COLUMNTYPE]:[COLPARAM] = [EXPRESSION,]
    }

    LOADER TABLE1 LOAD1
    {
    SQL 
    = SELECT * FROM TABLE1 WHERE COLUMN1 = :COLUMN1,
    NUM:COLUMN1 
    = TABLE2.COLUMN1 + 12
    }


    功能:
    从数据库装载数据到Samrara进行运算,不需要用户提供。
    COLPARAM就是SQL中的参数。

    后续标志:
    TRUE/FALSE/NEXT


    其他:
    同上。


    MAPPER


    MAPPER [IDENTIFIER]
    {
    [MARK] = [EXPRESSION,]
    }

    MAPPER MAPPER1
    {
    STR:@PERSON = TABLE2.COLUMN1 + DEMO
    }

    功能:
    把表达式运算结果赋值到标记,供后续模块使用。提高复用性。

    后续标志:
    NEXT


    其他:
    同上。

     

    IFER

    IFER [IDENTIFIER]
    {
    [EXPRESSION]
    }

    IFER I1
    {
    AND(( TABLE1.COLUMN1 + TABLE1.COLUMN2 ) > MAX(TABLE2.COLUMN1 * TABLE2.COLUMN2))
    }

     功能:
    根据表达式计算bool结果,然后根据结果控制后续。

    后续符号:
    TRUE/FALSE

    函数包括:
    AND / OR / 无. AND表示输入的数据必须全部符合才判真、or则有真则真、无就是每次都判断。

    例子:
    例如订单子表如果价格>5的,那么生成入库单、否则生成送货单。这个就是无函数。
    如果订单子表当所有的到货数量 == 要货数量,那么才订单确认,这个就是AND.


    其他:
    表达式包括数字bool运算和字符bool运算。表达式参考exchanger




    SWITCHER

    SWITCHER [IDENTIFIER]
    {
    [CASE] = [EXPRESSION]
    }

    SWITCHER SW1
    {
    CASE1 
    = TABLE1.COLUMN1 == 12,
    CASE2 
    = TABLE1.COLUMN1 > 12,
    CASE3 
    = TABLE1.COLUMN1 < 12
    }

    功能:
    是更加复杂的if,判断每个case,然后控制后续。

    后续符号:
    [CASE],用户指定。

    函数包括:
    AND / OR / 无. 同上。

    其他:
    表达式包括数字bool运算和字符bool运算。



    CHANNEL

    CHANNEL [IDENTIFIER]
    {
    [FROM] = [TO]
    }

    CHANNEL CHANNEL1
    {
    EXCHANGER.TABLE1.E1.
    NEXT = SPLITER.TABLE1.SP1,

    SPLITER.TABLE1.SP1.OLD 
    = EXCHANGER.TABLE2.E1,
    SPLITER.TABLE1.SP1.NEW 
    = EXCHANGER.TABLE2.E2
    }

    功能:
    把各种模块进行组织,达到数据流效果。



    高级话题:

    Samrara的核心关键字:单流、多流、分流、合流

    。一张订单主表对应5张订单子表,那么主表就是单流、子表就是多流。
    。如果订单子表到货金额>5,就XXX,否则YYY。这个就是分流。
    。当分流后再次汇聚到相同模块,就是合流。

    单流和多流概念非常重要,会影响到数据的输出正确性。例如一个刚才的exchanger例子:

    EXCHANGER TABLE1 T1
    {
    NUM:COLUMN1 = TABLE2.COLUMN1 * 0.11
    NUM:COLUMN2 = TABLE2.COLUMN2 + TABLE2.COLUMN3
    COLUMN3 = DEMOTEST
    }

    如果用户给出table2的数据有5条,就是多流,那么生成的table1也会有5条数据。再看一个例子:

    COLUMN1 = TABLE2.COLUMN1 + TABLE3.COLUMN1

    如果用户给出table2数据为1条,table3数据为5条,那么仍然输出5条,其中table2的那条数据重复参与运算5次。

    如果用户给出table2数据为3条,table3数据为5条,那么就会报错,因为无法进行流匹配。

    再复杂一点,如果用户之前给出了table1的数据,那么重新考虑脚本:

    EXCHANGER TABLE1 T1
    {
    NUM:COLUMN1 = TABLE2.COLUMN1 * 0.11
    NUM:COLUMN2 = TABLE2.COLUMN2 + TABLE2.COLUMN3
    COLUMN3 = DEMOTEST
    }

    如果table1 = 1, table2 = 5,报错,因为无法对应。

    小结一下:

    单流 = 单流 正确
    单流 = 多流 错误
    单流 = 函数(多流)正确

    多流 = 单流 正确
    多流 = 多流 正确(流量必须匹配)
    多流 = 函数(多流)正确

    接下来还会有更加细致的问题。

  • 相关阅读:
    Error-Project facet Java version 1.8 is not supported
    如何运行Struts2官网最新Demo?
    Java计算两个字符串日期之间的天数差
    Mybatis XML配置
    使用本地缓存快还是使用redis缓存好?
    mysql数据统计技巧备忘录
    java中的全局变量如何实现?ThreadLocal~
    干货!一次kafka卡顿事故排查过程
    《Java 多线程编程核心技术》- 笔记
    《分布式服务框架原理与实践》- 总结一下吧
  • 原文地址:https://www.cnblogs.com/zc22/p/967188.html
Copyright © 2011-2022 走看看