已計算的屬性方程式
已計算的屬性會利用方程式從其他屬性的值擷取其值。這些方程式可同時利用屬性及文字值來運算或產生衍生的屬性值。
您可在建立已計算屬性時的「設定內容」步驟中將方程式輸入「方程式」欄位,或在建立好已計算屬性後,在屬性資訊頁上編輯「方程式」欄位來輸入方程式。
計算方程式時,如果任何屬性值為空白或空值,則已計算屬性的值會顯示為「(無法指派)」。您可以使用支援的 ' isNull ' 函數來處理這類情況。
以下列方程式為例:
((attrA == "ValueA") ? "301" : ((attrB == "ValueB") ? "302" : "303"))
如果您為屬性 (attrAattrB) 提供值,則上述方程式會計算已計算屬性的值。
但是,如果任何屬性值為空白或空值,則已計算屬性的值會顯示為「(無法指派)」
您可以使用 isNull() 函數更新方程式,方法如下:
((!isNull(attrA) && (attrA == "ValueA")) ? "301" : (((!isNull(attrB)) && (attrB == "ValueB")) ? "302" : "303"))
如果屬性的任何一個或兩個值為空白或空值,則會正確計算上述方程式。
如果 attrAattrB 這兩個屬性的值都為空值,則計算的值為 "303"
* 
如果在建立或編輯物件時修改影響已計算屬性的屬性,不會立即重新計算方程式。在處理完建立或編輯動作之後,會重新計算方程式並更新已計算屬性值。
如需有關如何在包括於屬性配置圖時顯示已計算屬性的資訊,請參閱屬性顯示
已計算屬性數值結果的本地化取決於瀏覽器地區設定。
方程式中的資料類型
方程式中僅支援下列資料類型的屬性:「字串」「整數」「實數」「具有單位的實數」「超連結」「日期及時間」「布林值」。方程式的結果必須與已計算屬性的指定資料類型相符,但可在方程式本身內使用其他資料類型的屬性。
當在方程式中使用不同資料類型的屬性時,系統會先將資料類型轉換為與方程式中所用運算或函數需要的資料類型相同,然後再執行運算或函數。方程式結果為該相同資料類型。會以下列優先順序套用資料類型轉換:
1. 「字串」- 如果方程式中的至少一個引數擁有「字串」資料類型,會將所有引數都轉換為擁有「字串」資料類型。(「超連結」「日期及時間」會自動轉換為「字串」。)
2. 「具有單位的實數」- 如果方程式中的至少一個引數擁有「具有單位的實數」資料類型,會將所有引數都轉換為擁有「具有單位的實數」資料類型。
3. 「實數」- 如果方程式中的至少一個引數擁有「實數」資料類型,會將所有引數都轉換為擁有「實數」資料類型。
4. 「整數」- 如果方程式中的至少一個引數擁有「整數」資料類型,會將所有引數都轉換為擁有「整數」資料類型。
5. 「布林值」
例如,在方程式 attrA + attrB 中,如果 attrA「字串」資料類型,而 attrB「實數」資料類型,會將 attrB 轉換為「字串」資料類型並與 attrA 合併。如果 attrA 的值為 Result:,而 attrB 的值為 1.5,則方程式的結果為 Result: 1.5
同樣地,如果 attrC「整數」資料類型,而 attrD「實數」資料類型,則在方程式 attrC * attrD 中,會將 attrC 轉換為「實數」資料類型,且方程式的結果為「實數」資料類型。
系統會計算儲存已計算屬性時輸入的方程式。如果方程式結果的資料類型與已計算屬性的資料類型不符,會傳回錯誤,且不會儲存方程式。方程式結果的資料類型可透過變更指定方程式的方式來轉換。在下文中,<formula> 是資料類型將會發生轉換的原始方程式。
欲將「布林值」「整數」「實數」「具有單位的實數」的方程式結果轉換為「字串」資料類型,請在「方程式」欄位中輸入下列內容:
""+(<formula>)
欲將「布林值」「整數」「實數」資料類型的方程式結果轉換為「具有單位的實數」資料類型,請在「方程式」欄位中輸入下列內容:
unit("1.0000000000000")*(<formula>)
(若要保留原始結果的完整精確度,至少需要十三個零)。
欲將「布林值」「整數」資料類型的方程式結果轉換為「實數」資料類型,請在「方程式」欄位中輸入下列內容:
1.0*(<formula>)
欲將「布林值」資料類型的方程式結果轉換為「整數」資料類型,請在「方程式」欄位中輸入下列內容:
1*(<formula>)
範例:計算數值
利用運算子及屬性的內部名稱建立可計算所需屬性值的方程式。(您必須在方程式中使用屬性的「內部名稱」,而非「顯示名稱」。)
例如,若您具有「總成本」屬性 (應為「數量」屬性的值乘以「單位成本」的值再加上「手續費」屬性的值),則您應利用下列方程式來計算「總成本」屬性的值:
(quantity*unitCost)+fee
範例:組合非數字屬性值
方程式也可用於結合非數字的屬性值。
例如,若您已建立名為 ID 的已計算屬性,則您可利用下列方程式結合類型的名稱與數字屬性的值,以作為 ID 屬性 的值:
name+"("+number+")"
如此應產生如 MyDocument(0001A) 的 ID 屬性值。
支援的函數
* 
已計算的屬性目前不支援多值功能。
受支援的函數如下:
函數
描述
isNull( )
空值檢查
unit( )
「字串」資料類型轉換為「具有單位的實數」資料類型
str( )
將數字轉換為「字串」資料類型
abs( )
絕對值或量值
avg( )
一系列值的平均值
sum( )
一系列值的總和
min( )
一系列值的最小值
max( )
一系列值的最大值
round()
將具有小數的數值 (實數) 轉換為整數
當小數包含 .5 時,會將數值四捨五入為偶數 (例如,30.5 會向下四捨五入為 30,而 31.5 會向上四捨五入為 32)
當小數包含其他數值時,會將數值四捨五入為最相近的值 (例如,30.8 會向上四捨五入為 31,而 33.4 會向下四捨五入為 33)
bround()
bround (BigDecimal round) 函數的作用與 round 函數類似。當計算小數部份接近 5 的小數 (例如 xx.5) 時,與 round 函數相比,bround 函數會提供更高的精確度。
使用 bround 函數,您可以指定應考慮的捨入值小數位數。例如 ((bround((a+b+c)*10, dp))/10.00),其中 a、b 和 c 是屬性,dp 是應考慮捨入的小數位。如果未提供,dp 的預設值為 7。
在下面的範例中,round 函數會傳回不同的結果,而 bround 函數會傳回相同的結果:
((round((10.20+10.35+02.00)*10))/10.00) —> (round(225.4999999999997)/10.00) —> 225/10.00 —> 22.5
((bround((10.20+10.35+02.00)*10))/10.00) —> (bround(225.49999999999997)/10.00) —> 226/10 —> 22.6
((round((10.25+10.30+02.00)*10))/10.00) —> (round(225.5)/10.00) —> 226/10.00) —> 22.6
((bround((10.25+10.30+02.00)*10))/10.00) —> (bround(225.5)/10.00 —> 226/10) —> 22.6
根據 java 中浮點數的內部表示,((10.20+10.35+02.00)*10) 會傳回值 225.4999999999997,((10.25+10.30+02.00)*10) 會傳回值 225.5。
針對值 225.49999999999997,請考慮在 bround 函數中提供不同 dp 值時得到的這些結果。
小數位 (dp)
結果
0 與 14
225
1 到 13
226
mod()
傳回一個數字除以另一個數字的餘數。(僅限「整數」資料類型)
${}
換行屬性內部名稱,其中包含特殊字元,因此可在方程式中使用。所有屬性內部名稱都可以換行,但是含有破折號 (-)、貨幣符號 ($) 或方括號 ([]) 的屬性內部名稱在方程式中使用時必須換行。例如,內部名稱為 my-attributemy[very$complex]-attribute 的屬性若按下列方式換行,則可用於方程式︰
${my-attribute}
${my[very$complex]-attribute}
如果用於範例:計算數值部份的屬性具有內部名稱,且其中包含特殊字元,則「總成本」屬性的方程式可能如下所示︰(${item-quantity}*${unit-cost})+${handling-fee}
支援的運算子
受支援的運算子如下:
運算子
描述
+
加法;也可用於合併字串
-
減法
*
乘法
/
除法
( )
前括號及後括號,用於指出操作順序的不同優先程度 (括號內的操作應先執行)
" "
雙引號,用於指出引號內的內容是文字字串。會將不在雙引號內的任何非數字視為屬性名稱
>
大於
<
小於
>=
大於等於
<=
小於等於
==
等於
!=
不等於
^
次方或冪
&
|
~
^*
排除 Or
&&
||
!
? :
條件運算子,指出指定的條件為真或不為真時的結果:
(條件) ? 為真的值 : 不為直的值
例如,假設某個類型有長度、寬度及形狀的屬性,其中形狀是利用下列方程式得出的已計算屬性:
(長度>寬度) ? "較長" : "較寬"
若長度屬性值大於寬度屬性值,則形狀屬性會被指派一個較長的值。若長度屬性值不大於寬度屬性值,則形狀屬性會被指派一個較寬的值。
%
餘數
這是否有幫助?