Business Rule Framework Plus(業務規則框架,以下簡稱BRFplus或BRF+)是一個強大的工具, 它允許用戶以直觀的方式對規則建模,並在不同的應用程序中重用這些規則。通過它,業務顧問甚至業務用戶可以自行在系統中實現自定義業務邏輯,而不必求助於程序開發者。
函數類別 |
例子 |
---|---|
日期時間 |
以各種單位計算2個時間之間的差值;判斷閏年;從給定的時間中提取任一部分;等等。 |
字符串處理 |
拼接、提取字符串;計算字符串長度;計算字符串相似度;等等。 |
數學函數 |
對數;冪; 三角函數; 等等。 注意:傳遞給三角函數的參數必須以弧度給出(一個完整的圓 = 2 Pi)。 |
系統函數 |
檢索特定系統信息,比如工廠日歷,操作系統,登陸語言,等等。 |
表函數 |
檢索有關在BRFplus表數據對象中的信息,如最大值或最小值,總和,平均值,行數等。 |
其它功能 |
轉換數量和金額;數字取整;判斷初始值。 |
在BRF+工作台,用戶可以按分類查找自己需要的函數,也可以使用過濾器,如下圖:
每個函數都有自己的文檔,其中需求描述、使用示例、參數和注釋信息等,點擊“文檔”列的顯示鏈接,即可以查看,如圖:
用戶可以定義自己的函數,這需要進行一些編程工作,具體可以參考:
How to Create Formula Functions ( http://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/10e9c96f-0c8b-2b10-6885-f00adbeb314b).
金額數據的取整
在內部,BRF+永遠在數據計算中使用在最大精度,最大精度根據數據對象的定義決定。然而,在涉及到公示表達式的結果是金額數據對象的時候,最大精度不會在結果上面表現出來。在該情況下,BRF+會使用為當前貨幣定義的小數位數,就算為數據對象定義了更多的小數位數,也會被無視。比如,
在一個公示表達式中存在這樣的計算:25 € / 8
雖然內部結果是3.125 €,但是實際得到的結果數據是3.13 €,因為對於歐元而言,自定義表中只定義了2位小數位。
數量的量綱檢查
系統會對包含量綱的數量運算進行特別的檢查,因為實際上只有部分度量單位之間的計算是有意義的,比如:
公式 |
結果數據對象 |
有效性 |
---|---|---|
長度 / 時間 |
速度 |
√ |
長度 / 質量 |
數字 |
× |
示例部分
上面的內容也許略顯冗長枯燥,下面是一個輕松的step by step的示例,我會創建一個公式,並把它分配給函數,其功能是將兩個輸入參數相加、並輸出結果。此外我也會貼出調用這個BRF+函數的簡單的ABAP代碼。
1,打開BRF+工作台
輸入事務代碼BRF+或者BRFPLUS,如果能夠打開一個包含左側導航欄、有着歡迎界面的瀏覽器頁面(Web Dynpro)應用,說明你可以使用BRF+。如果打不開或者系統提示某些錯誤的話,說明有可能存在配置問題,也可能是你的系統尚不支持BRF+,這種情況下請聯系你的BASIS同事。
2,創建應用程序
點擊圖中左上角的“創建應用程序”,在彈出對話框內輸入應用程序的名字、描述,存儲類型選擇定制(關於選項的區別,參考前文),開發包$tmp。填完后,點擊右下角按鈕“創建並導航到對象”
3,創建數據對象
想要在公式中計算,就要有用於被計算的數據對象。也就是上面提到的上下文數據(Context Data)。
右鍵點擊應用名,選擇創建->數據對象->元素(批量創建),如下圖
因為我們要用到3個數據對象(兩個輸入對象,一個輸出對象),所以選擇批量創建。
在彈出窗口中輸入數據技術信息,如下圖,
創建3個數據對象,分別是amount_1,amount_2,amount_result,都是金額類型。點擊確定。
展開左側的應用,可以看到存在三個數據對象,對象狀態是白色菱形,即未激活。依次選擇它們,點擊編輯->激活,激活成功后,對象狀態會變為綠色方塊,
4,創建公式
接下來,右鍵應用程序,選擇創建->表達式->公式,在彈出對話框中輸入公式名,點擊“創建並導航到對象”,
點擊“上下文對象”,此時,系統會提示我們尚未把公式分配給函數或規則集,因此無法使用上下文對象,因此我們需要先創建個函數,
5,創建函數並分配公式
右鍵應用程序,選擇創建->函數,
在創建好的函數中,選擇模式為“功能模式”,選擇“頂層表達式”為上一步創建的公式,之后點擊“添加現有數據對象”,
在彈出對話框中選中兩個輸入對象,
選擇“結果金額”為結果對象(輸出對象),
點擊“保存”,
6,編輯公式
前往創建的公式,點擊“上下文概覽”,可以看到之前在函數中添加的數據對象,可以使用它們在公式中進行運算,
接下來,為公式分配一個結果數據對象,
這里我們使用的是普通模式的編輯模式,因此,公式的編輯要靠鼠標點擊選項進行,點擊“上下文”區域中的上下文,相應的對象會被添加到公式中,如下圖
依次點擊 金額1,+,金額2,可以得到一個加法公式,
激活公式,
7,模擬函數運行
在導航區域可以看到各個對象的激活情況,將全部對象激活后,函數已經處於可用狀態。我們需要對它的功能進行測試。前往上面創建的函數,
點擊“詳細”中的“模擬”按鈕,就可以模擬函數的運行,測試其工作效果了,
在下一屏幕,點擊“繼續”按鈕,
在“模擬數據”部分輸入測試數據,點擊“執行”,
可以看到函數運行后的結果,至此,這個簡單示例就完成了。
8,在ABAP中調用BRF+函數
配置工作已經完成,接下來是開發方面的工作,開發者不需要寫業務邏輯,需要做的是在合適的地方調用已經配置好的函數。
每個BRF+都有一個唯一標識作為ID,可以通過ID來調用函數。可以在函數的“一般”屬性中看到它的ID,如圖,
在SE38創建程序,代碼如下,
REPORT ztest_brfplus. DATA(lo_fuction) = cl_fdt_factory=>if_fdt_factory~get_instance( )->get_function( '005056A477601EE8A7856D04576B0280' ). DATA: i_amount1 TYPE if_fdt_types=>element_amount, i_amount2 LIKE i_amount1. i_amount1 = VALUE #( number = '12.23' currency = 'EUR' ). i_amount2 = VALUE #( number = '12.00' currency = 'EUR' ). " Set the BRFplus function context ( input variables ) DATA(lo_context) = lo_fuction->get_process_context( ). lo_context->set_value( : iv_name = 'AMOUNT_1' ia_value = i_amount1 ), iv_name = 'AMOUNT_2' ia_value = i_amount2 ). " Process the BRFplus function lo_fuction->process( EXPORTING io_context = lo_context IMPORTING eo_result = DATA(lo_result) ). " Retrieve the BRFplus function result DATA result LIKE i_amount1. lo_result->get_value( IMPORTING ea_value = result ). cl_demo_output=>display( result ).
運行程序,可以在彈出窗口中觀察到結果為兩個輸入變量之和,如下圖,
總結
以上是BRF+中公式表達式的基礎知識和簡單示例創建過程,配置的步驟順序不是唯一的,可以按照你的實際使用情況調整。關於公式表達式相關的更多內容,可以參考:
Formula Expression - SAP Document
BRFplus Basics – How to call a function
BRFplus Basics – Handling of Amounts
在下一篇文章中,我會介紹Decision Table Expression相關的內容。