Windchill のその他の機能 > 製造プロセス管理 > プロセス計画エクスプローラのカスタマイズ > カスタム計算式の作成
  
カスタム計算式の作成
計算式セットを使用して、属性のセットを対応する計算式や方程式に関連付け、属性値の計算に使用します。計算式セットを構成するコンポーネントは、次のとおりです。
FormulaSet はセットを識別します。
FormulaMetaData は Java 計算式の名前と説明を定義します。
FormulaValuatedLink は属性名を計算式の定義に関連付けます。
次の図は、カスタム計算式を追加するために作成する必要があるデータの例を示しています。
「計算式セット」タブは、オペレーションに関連付けられた時間とコストの計算に使用できる定義済みの計算式を選択するときに使用します。たとえば、標準の時間とコストの計算式セットや、定期的な時間とコストの計算式セットなどです。これらの計算式セットでは、オペレーションで生産される部品の数が考慮され、作業拠点に対して定義された仕様 (セットアップ時間、キュー時間など) が使用されます。計算式と計算式セットは、「時間とコストを計算」操作が選択されているときと、プロセス計画やオペレーションを製造ガントエクスプローラにロードするときに使用されます。
複数の計算式セットが 1 つの作業拠点に関連付けられているときには、その作業拠点のデフォルトの計算式セットとして 1 つの計算式セットを指定することができます。作業拠点をオペレーションに割り当てると、この計算式セットがオペレーションに割り当てられます。
* 
計算式を計算式セットに割り当てる必要があります。既存の計算式セットが存在しない場合は、カスタム計算式を定義する前に計算式セットを定義する必要があります。カスタマイズされた計算式セットに PSE を使用して値を追加できるように、PSE をカスタマイズすることができます。詳細については、PSE のドキュメンテーションを参照してください。
カスタム計算式を作成するには、次の手順に従います。
1. LoadFromFile ユーティリティを使用して XML ベースのロードファイルを読み込みます。ここで <csvname> はシステムに対して一意でなければなりません。このロードファイルには次のエレメントがすべて含まれている必要があります。
csvFormulaSet - FormulaSet オブジェクトを作成します。
csvFormulaMetaData - FormulaMetaData オブジェクトを作成します。
csvAddFormulaMetaData - FormulaMetaData を FormulaSet にリンクします。
<csvFormulaSet handler="com.ptc.windchill.mpml.formula.LoadFormula.
createFormulaSet">
<csvuser></csvuser>
<csvname>Standard Time and Cost</csvname>
<csvdescription>This formula Set is used to calculate the time and
cost of an Operation</csvdescription>
<csvfolder>/Default/Design</csvfolder>
<csvparentcontextPath></csvparentcontextPath>
<csvorganizationName></csvorganizationName>
</csvFormulaSet>
2. 計算式インタフェースを実装して計算値を返す Java クラス名にリンクすることで、計算式メタデータを作成します。たとえば FloatingPointWithUnits などです。
LoadFromFile ユーティリティを使用して XML ベースのロードファイルを読み込みます。ここで <csv 名> はシステムに対して一意で、<csv 計算クラス名> は計算式インタフェースを実装する Java クラスです。
<csvFormulaMetaData handler="com.ptc.windchill.mpml.formula.
LoadFormula.createFormulaMetaData">
<csvuser></csvuser>
<csvname>StandardAttributeValueFormulaTime</csvname>
<csvdescription>Standard Attribute Value Formula</csvdescription>
<csvtype>time</csvtype>
<csvformulaClassName>com.ptc.windchill.mpml.formula.Standard AttributeValueFormula</csvformulaClassName>
<csvfolder>/Default/Design</csvfolder>
<csvparentcontextPath></csvparentcontextPath>
<csvorganizationName></csvorganizationName>
<csvorganizationID></csvorganizationID>
</csvFormulaMetaData>
3. 属性名を使用して、計算式メタデータを計算式セットにリンクします。
たとえば、計算式を計算するサービスを呼び出した場合、その計算式セットに関連付けられた計算式メタデータが実行され、属性名をキーとして使用して、すべての計算値のマップが返されます。
LoadFromFile ユーティリティを使用して XML ベースのロードファイルを読み込みます。ここで <csv 属性名> は MPMOperation オブジェクトの時間とコストに関する再利用可能な属性です。
<csvAddFormulaMetaData handler="com.ptc.windchill.mpml.formula.
LoadFormula.addFormulaMetaDataToFormulaSet" >
<csvformulaSetName>Standard Time and Cost</csvformulaSetName>
<csvformulaMetaDataName>StandardAttributeValueFormula Time</csvformulaMetaDataName>
<csvattributeName>IBA|MPM_Attr_MPMOperationSetupTime </csvattributeName>
</csvAddFormulaMetaData>
計算式インタフェースを実装する Java クラスを作成する場合、次に示す入力には入力マップにおいてデフォルトでアクセス可能です。
FormulaHelper.FORMULAVALUATED: 計算式セットがリンクされているオブジェクトで、ForumlaValuated にキャストします。
FormulatHelper.FORMULAVALUATED_TI: 計算式セットがリンクされているオブジェクトタイプインスタンスで、TypeInstance にキャストします。Null にすることもできます。
FormulaHelper.FORMULAVALUATED_ATTRIBUTE_NAME: 計算式メタデータの計算式セットへのリンクに使用する属性名で、String にキャストします。結果のマップ内でキーとして使用されます。
FormulaHelper.LOT: 「時間とコストを計算」操作のコンテキストでユーザーによって指定されるロット値。Double にキャストします。
計算値の Java クラスの例を以下に示します。
import com.ptc.core.meta.common.AttributeIdentifier;
import com.ptc.core.meta.common.AttributeTypeIdentifier;
import com.ptc.core.meta.common.TypeinstanceIdentifier;
import com.ptc.core.meta.context.common.AttributecontextSpec
import com.ptc.core.meta.server.TypeIdentifierUtility;
import com.ptc.core.meta.type.common.TypeInstance;
import com.ptc.core.meta.type.common.TypeInstanceFactory;
import com.ptc.windchill.mpml.MPMLinkHelper;
import java.text.NumberFormat;
import java.util.HashMap;
import wt.units.FloatingPointWithUnits;
import wt.util.WTContext;
import util.WTException;
public class StandardAttributeValueFormula implements Formula{
private static final String RESOURCE = "com.ptc.windchill.mpml.formula.formulaResource";
private static NumberFormat numberFormat =
NumberFormat.getInstance(WTContext.getContext().getLocale());
/** Creates a new instance of StandardAttributeValueFormula */
* This Formula simply return the value of the attribute.
public StandardAttributeValueFormula() {
}
public FloatingPointWithUnits calculate(HashMap inputs)throws
InvalidFormulaInputException, WTException{
//Get the object on which the formula is call
Object object = inputs.get(FormulaHelper.FORMULAVALUATED);
//Get the TI on which the formula is call
TypeInstance ti =(TypeInstance)inputs.get(FormulaHelper.FORMULAVALUATED_TI);
//Get the attribute that is calculated by the formula
String attribute_name = (String)inputs.get(FormulaHelper.FORMULAVALUATED_ATTRIBUTE_NAME);
if(object == null)
throw new InvalidFormulaInputException( RESOURCE, formulaResource.REQUIRED_FORMULA_INPUT_MISSING, new Object[]{FormulaHelper.FORMULAVALUATED} );;
TypeInstanceIdentifier tii = null;

//Get the TI of the object if null
if(ti==null){
tii = TypeIdentifierUtility.getTypeInstanceIdentifier(object);
ti = TypeInstanceFactory.newTypeInstance(tii);
}else
tii = (TypeInstanceIdentifier)ti.getIdentifier();
//Get ATI for the attribute to calculate
AttributeTypeIdentifier ati = (AttributeTypeIdentifier)MPMLinkHelper.getIdentifierFactory().get(attribute_name,tii.getDefinitionIdentifier());
AttributeIdentifier[] ais = ti.getAttributeIdentifiers(ati);
//If the attribute value is not in the TI, update it to get the value
if(ais.length<1){
AttributecontextSpec fl = new AttributecontextSpec();
fl.putEntry(ati);
ti = MPMLinkHelper.updateTypeInstance(new TypeInstance[] {ti}, fl, null)[0];
ais = ti.getAttributeIdentifiers(ati);
}
//Get the attribute value
Object value = null;
if(ais.length>0)
value = ti.get(ais[0]);
//Return the value of the attribute if it’s a FloatingPointWithUnits
if(value instanceof FloatingPointWithUnits)
return (FloatingPointWithUnits)value;
// value is null
return FloatingPointWithUnits.valueOf(numberFormat.format(0));
}
}
* 
新しい操作を作成し、計算式サービスを使用して計算式セットの実行を呼び出すことで、計算式にさらに入力を追加することもできます。新しい操作の作成方法については、PSE のドキュメンテーションを参照してください。