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,報錯,因為無法對應。
小結一下:
單流 = 單流 正確
單流 = 多流 錯誤
單流 = 函數(多流)正確
多流 = 單流 正確
多流 = 多流 正確(流量必須匹配)
多流 = 函數(多流)正確
接下來還會有更加細致的問題。
轉載于:https://www.cnblogs.com/zc22/archive/2007/11/21/967188.html
總結
以上是生活随笔為你收集整理的Samsara v2.0 打造ERP数据流脚本编程 —— 脚本规范的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL Cluster2个数据节点压
- 下一篇: 服装内部条码和服装国标码的区别