高度なカスタマイズ > ビジネスロジックのカスタマイズ > 「タイプおよび属性の管理」でのカスタマイズ > 計算属性での BusinessAlgorithm の使用 > サンプルコード
  
サンプルコード
パッケージ化されたサンプル
AbstractCarambolaAttributeSumBusinessAlgorithm
これは部品構造内のすべての部品について、指定した属性の "合計" 値を計算して返すビジネスアルゴリズムの例です。このアルゴリズムは数値属性の "Formula" プロパティに使用します。合計する属性の内部名が、このアルゴリズムへの 1 つ目の引数として渡されます。
数値のリストを加算する方法はデータタイプによって異なるので、各種データタイプの値の合計計算を実際に処理するのはこの抽象クラスのサブクラスです。このようなデータタイプ固有の情報を処理する次の 3 つのサブクラスを用意しています。
IntCarambolaAttributeSumBusinessAlgorithm
FloatCarambolaAttributeSumBusinessAlgorithm
FloatWithUnitCarambolaAttributeSumBusinessAlgorithm
式の検証に使用されるこのデータタイプの一般的なサンプル値を提供するメソッド (getSampleValue()) と、このデータタイプの値を合計するメソッド (calculateSumValue()) の 2 つのデータタイプ固有のメソッドは、これらのサブクラスによってオーバーライドされます。
このため、浮動小数点タイプの属性に対してこのアルゴリズムを使用するには、「タイプおよび属性の管理」ユーティリティで計算属性の formula プロパティに次のような式を入力します。
execute("com.ptc.carambola.customization.examples.businessfield.FloatCarambolaAttributeSumBusinessAlgorithm", "<name of a floating point attribute>")
このコード例は、<Windchill>\Windchill\srclib\wnc\ にあります。
この例で使用するファイル
<Windchill>\Windchill\srclib\wnc\Carambola-java.jar
サンプルコードの説明
execute() メソッドは、最初に、合計する属性の名前、および現在のビジネスオブジェクト (WTPart) を取得します。次に、getAllPartStructure(final BusinessObject curBusinessObject) ヘルパーメソッドを呼び出して現在のビジネスオブジェクトの部品構造ツリーを調べて、その構造内の部品の WTCollection を返します (これにはクラス wt.navigation.PartRequest および wt.navigation.DependencyHelper が使用されます)。
構造内の部品のコレクションを取得した後、execute() は getBusinessField( final String fieldName, final TypeIdentifier contextType ) ヘルパーを呼び出して、その構造全体で合計する BusinessField オブジェクトを返します。
次に、execute()getPartStructureValues(final WTCollection partCollection, final BusinessField fieldToSum ) ヘルパーを呼び出して、その構造内のすべての部品について、必要なビジネスフィールドの値のリストを取得します。このヘルパーは最初にクラス com.ptc.core.businessfield.server.businessObject.BusinessObjectHelper を使用して、すべてのビジネスオブジェクトを一度に作成して読み込みます (まだ読み込まれていない場合)。次に、ビジネスオブジェクト間をループして fieldToSum ビジネスフィールド内の値を取得し、その値をリストに追加します。最後に、値のリストが返されます。
次に、execute() はサブクラスによってオーバーライドされた calculateSumValue(List<Number> allValuesForAttribute) メソッドを呼び出して、実際にすべての値を合計します (どのタイプのサブクラスを見ても長い値を合計するのは簡単であることがわかりますが、浮動小数点値を加算する際には単位と精度を考慮する必要があります)。
最後に、execute() は合計を返し、この合計が "execute()" 式関数の値として返されます (式に execute() 関数だけが含まれている場合、これは式全体と属性の値でもあります)。