天天看點

jxTMS--web端的自動計算

web端的自動計算

自動計算就是當使用者在出報價時,當輸入了某産品的折扣後價格、數量後,自動計算價格小計、折扣率。由于jxTMS的架構是web服務,是以如果将此功能放到背景來實作,則反應會相當的遲緩,使用者使用感受會非常難受。是以自動計算就放到web端來實作。

自動計算的實作:

  • 定義自動計算的算式
  • jxTMS會解析這些算式,将其轉換為字尾表達式形式
  • web端在建立控件時,會檢測本控件是否參與自動計算,如果本控件參與自動計算,則為其安裝自動計算的執行器
  • 當使用者在某控件輸入後,如果該控件安裝有自動計算的執行器,則觸發該執行器,以字尾表達式計算方法執行計算,并将計算結果指派給結果控件,如果結果控件還參與了其它自動計算,則鍊式觸發相關算式的自動計算
  • 執行器的結果指派等價于使用者的手工輸入,是以也會被pollData所收集并自動發送到背景

以常見的銷售報價為例,自動計算會用到:

  • 産品明細表中小計一欄為單價×數量
  • 産品總價應該為所有各行的小計的求和
  • 運費應是産品總價×某種費率
  • 最後的報價是(産品總價+運費)× 折扣

是以自動計算共有三種:

  • pro row:就是對資料表逐行執行的行内各列參與的計算,如每行的小計=單價×數量
  • sum col:列計算,就是對某一列進行累加,如總計是所有行的小計的累加
  • ctrl:單個控件之間的計算,如總價=總計+運費-折扣

這三種自動計算的文法請參考【線上程式設計手冊->web界面->自動計算】中的說明。例子可參考demo中order的web檔案中銷售訂單中的定義:

/* 産品明細表每行的扣率 =  報價 / 清單價 的百分比 */
with sfApproveSalesOrderD1t2 compute pre row itemDiscount=realPrice / itemPrice * 100;
/* 産品明細表每行的清單價小計 =  清單價 × 數量 */
with sfApproveSalesOrderD1t2 compute pre row itemSum=itemPrice * itemNum;
/* 産品明細表每行的報價小計 = 報價 × 數量 */
with sfApproveSalesOrderD1t2 compute pre row realSum=realPrice * itemNum;

/* 訂單的清單總價 =  産品明細表每行的清單價小計的彙總 */
with sfApproveSalesOrder compute totalPrice = sum sfApproveSalesOrderD1t2.itemSum;
/* 訂單的報價彙總=  産品明細表每行的報價小計的彙總 */
with sfApproveSalesOrder compute sumPrice = sum sfApproveSalesOrderD1t2.realSum;
/* 訂單的報價折扣率=  報價彙總 /  清單總價 的百分比 */
with sfApproveSalesOrder compute discoutRatio=sumPrice / totalPrice * 100;

/* 訂單的成交金額=  報價彙總 - 折扣金額 */
with sfApproveSalesOrder compute realPrice=sumPrice - extDiscount;
/* 訂單的實際折扣率=  成交金額 /  清單總價 的百分比 */
with sfApproveSalesOrder compute realDiscoutRatio=realPrice / totalPrice * 100;
           

自動計算文法中的計算表達式的文法為:

計算式 (算符 計算式)*
           

其中,算法包括:+、-、*、/

計算式的文法:

計算單元 (算符 計算單元)*
左圓括号 計算單元 (算符 計算單元)+ 右圓括号
           

計算單元則包括:

(資料表名 .)? 變量名
數值
           

隻有列計算中的計算單元有【資料表名.】的字首,其它兩種自動計算都不需要。

列計算的時候還支援按條件彙總,即當有【when 條件表達式】時,隻有當條件表達式成立時,才彙總該行。列計算的完整文法為:

with div名 compute 資料名= 表名.列名 (frequency)? (when 條件表達式 (, 條件表達式)*)?
           

其中,如果有frequency,則不累加該列的數值,而是累加次數。

條件表達式的文法如下:

列名 比較符 值
列名 rule=正規表達式字元串
           

其中,比較符和之前其它條件判斷文法中的比較符一樣,包括:等于【==】、不等【!=】、大于【>】、大于等于【>=】、小于【<】、小于等于【<=】、相似【like】共七種。值包括字元串、數值、bool、日期等。

目前,jxTMS已經打包為雲伺服器鏡像,開發者開箱即用:

jxTMS-騰訊雲市場​

上一篇: 解析表達式
下一篇: jxTMS--上下文