1. 程式人生 > >spec開發思路以及理解

spec開發思路以及理解

想要 union 是否為空 code ec2 最大 一個表 轉變 庫存管理

描述:編寫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

spec開發思路以及理解