計算属性の計算式
計算属性の値は、計算式を使用してほかの属性の値から派生します。これらの計算式では、属性値とリテラル値の両方を使用して、派生した属性値を計算または生成できます。
計算式は、計算属性を作成するときの「プロパティを設定」ステップで、「計算式」フィールドに入力できます。または、属性が作成された後、属性の情報ページの「計算式」フィールドを編集できます。
計算式を計算するときに、いずれかの属性値が空白または Null であれば、計算属性の値は "(割当できません)" として表示されます。このようなシナリオは、サポートされている 'isNull ' 関数を使用して処理できます。
例として次の計算式を考えてみます。
((attrA == "ValueA") ? "301" : ((attrB == "ValueB") ? "302" : "303"))
両方の属性 (attrAattrB) に値を指定すると、上記の計算式は計算属性の値を計算します。
ただし、どちらかの属性の値が空白または Null であれば、計算属性の値は "(割当できません)" として表示されます。
この計算式は、次のように IsNull() 関数を使用して更新できます。
((!isNull(attrA) && (attrA == "ValueA")) ? "301" : (((!isNull(attrB)) && (attrB == "ValueB")) ? "302" : "303"))
どちらかの属性または両方の属性の値が空白または Null であっても、上記の計算式は適切に計算されます。
属性 attrA および attrB の両方の値が Null の場合、計算値は "303" になります。
* 
オブジェクトの作成または編集時に計算属性に影響を与える属性が修正されても、計算式が即時に再評価されるわけではありません。作成操作または編集操作の処理後、計算式が再評価され、計算属性の値が更新されます。
計算属性を属性レイアウトに含めるときの表示方法については、属性の表示を参照してください。
計算属性の数値結果のローカライズは、ブラウザのロケールに基づいています。
計算式のデータタイプ
計算式では「文字列」「整数値」「実数」「実数 (単位付き)」「ハイパーリンク」「日付と時刻」「ブール」データタイプの属性のみがサポートされています。計算式の結果は、指定された計算属性のデータタイプと一致する必要がありますが、計算式内部ではさまざまなデータタイプの属性を使用できます。
計算式内部で多様なデータタイプの属性を使用した場合は、演算や関数の実行前に、計算式で使用する演算や関数に応じてデータタイプが自動的に変換されます。計算式の結果では、そのデータタイプが使用されます。データタイプの変換は次の優先順位で適用されます。
1. 「文字列」 - 計算式の少なくとも 1 つの引数のデータタイプが「文字列」である場合、すべての引数のデータタイプが「文字列」に変換されます(「ハイパーリンク」および「日付と時刻」は自動的に「文字列」に変換されます)。
2. 「実数 (単位付き)」 - 計算式の少なくとも 1 つの引数のデータタイプが「実数 (単位付き)」である場合、すべての引数のデータタイプが「実数 (単位付き)」に変換されます。
3. 「実数」 - 計算式の少なくとも 1 つの引数のデータタイプが「実数」である場合、すべての引数のデータタイプが「実数」に変換されます。
4. 「整数値」 - 計算式の少なくとも 1 つの引数のデータタイプが「整数値」である場合、すべての引数のデータタイプが「整数値」に変換されます。
5. 「ブール」
たとえば、attrA + attrB という計算式で、attrA「文字列」データタイプで、attrB「実数」データタイプの場合、attrB「文字列」データタイプに変換され、attrA と連結されます。attrA の値が Result: で、attrB の値が 1.5 の場合、計算式の結果は Result: 1.5 になります。
同様に、attrC「整数値」データタイプで、attrD「実数」データタイプの場合、attrC * attrD という計算式では attrC「実数」データタイプに変換され、計算式の結果は「実数」データタイプになります。
計算属性の保存時に、入力された計算式が評価されます。計算式の結果のデータタイプが計算属性のデータタイプと一致していない場合は、エラーが返され、計算式は保存されません。計算式の結果のデータタイプを変換するには、計算式の指定方法を変更します。以下では、<計算式> が変換前のデータタイプを持つ元の計算式です。
計算式の結果のデータタイプを「ブール」「整数値」「実数」「実数 (単位付き)」から「文字列」に変換するには、「計算式」フィールドに次のように入力します。
""+(<計算式>)
計算式の結果のデータタイプを「ブール」「整数値」「実数」から「実数 (単位付き)」に変換するには、「計算式」フィールドに次のように入力します。
unit("1.0000000000000")*(<計算式>)
(元の結果の精度を完全に維持するには、13 個以上のゼロが必要です。)
計算式の結果のデータタイプを「ブール」「整数値」から「実数」に変換するには、「計算式」フィールドに次のように入力します。
1.0*(<計算式>)
計算式の結果のデータタイプを「ブール」から「整数値」に変換するには、「計算式」フィールドに次のように入力します。
1*(<計算式>
例: 数値の計算
演算子と属性の内部名を使用して、目的の属性値を計算する計算式を構築します(計算式では、属性の「表示名」ではなく、「内部名」を使用する必要があります)。
たとえば、Total Cost 属性は、Unit Cost 属性の値に Quantity 属性の値を乗算し、Handling Fee 属性の値を加算したものであるとします。この場合、次の計算式を使用して Total Cost 属性の値を計算できます。
(quantity*unitCost)+fee
例: 数値以外の属性値の結合
計算式を使用して、数値以外の属性値を結合することもできます。
たとえば、ID という名前の計算属性を作成した場合、次の計算式を使用して、タイプの Name 属性と Number 属性の値を ID 属性の値として結合できます。
name+"("+number+")"
この計算式から、MyDocument(0001A) のような ID 属性の値が生成されます。
サポートされている関数
* 
現在、計算属性では複数値関数はサポートされていません。
次の関数がサポートされています。
機能
説明
isNull( )
Null チェック。
unit( )
「文字列」データタイプを「実数 (単位付き)」データタイプに変換します。
str( )
数値を「文字列」データタイプに変換します。
abs( )
絶対値またはマグニチュード。
avg( )
値リストの平均値。
sum( )
値リストの合計。
min( )
値リストの最小値。
max( )
値リストの最大値。
round( )
小数部を含む数値 (実数) を整数に変換します。
小数部の値が 0.5 の場合は、値が偶数に丸められます (たとえば、30.5 は 30 になり、31.5 は 32 になります)。
小数部の値がそれ以外の場合は、最も近い値に丸められます (たとえば、30.8 は 31 になり、33.4 は 33 になります)。
bround()
bround (大きい小数の丸め) 関数は round 関数と同じように機能します。bround 関数は、小数部が 5 に近い少数値 (xx. 5 など) を計算するときに、round 関数より高い精度を実現します。
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-attribute または my[very$complex]-attribute である属性は、以下のようにラップすると計算式で使用できます。
${my-attribute}
${my[very$complex]-attribute}
例: 数値の計算のセクションで使用されている属性の内部名で特殊文字が使用されている場合、「コスト合計」属性の計算式は以下のように表示されます。(${item-quantity}*${unit-cost})+${handling-fee}
サポートされている演算子
以下の演算子がサポートされています。
演算子
説明
+
足し算。文字列の連結にも使用できます。
-
引き算。
*
掛け算。
/
割り算。
( )
括弧は演算の優先順位を示します (括弧内の演算が優先して実行されます)。
" "
二重引用符は、引用符に囲まれた内容がリテラル文字列であることを示します。数値以外で、二重引用符に囲まれていないものは、属性名として処理されます。
>
より大きい
<
より小さい
>=
以上
<=
以下
==
等しい
!=
等しくない
^
べき乗または累乗
&
論理積
|
論理和
~
論理否定
^*
排他的論理和
&&
論理積
||
論理和
!
論理否定
? :
条件演算子は、指定した条件が true または false の場合の結果を示します。
(condition) ? value if true : value if false
たとえば、タイプに length、width、および shape の属性があり、shape は以下の計算式による計算属性であるとします。
(length>width) ? "longer" : "wider"
length 属性の値が width 属性より大きい場合、shape 属性には longer の値が代入されます。length 属性の値が width 属性の値よりも大きくない場合、shape 属性には wider の値が代入されます。
%
余り
これは役に立ちましたか?