Zusätzliche Funktionen von Windchill > Fertigungsprozess-Management > Den Prozessplan-Explorer anpassen > Benutzerdefinierte Formeln erstellen
  
Benutzerdefinierte Formeln erstellen
Ein Formelsatz wird verwendet, um einen Satz von Attributen mit den entsprechenden Formeln oder Gleichungen zu verknüpfen, die zum Berechnen ihres Werts verwendet werden. Ein Formelsatz besteht aus den folgenden Komponenten:
FormulaSet identifiziert den Satz.
FormulaMetaData definiert den Namen und die Beschreibung für eine Java-Formel.
FormulaValuatedLink verknüpft einen Attributnamen mit einer Formeldefinition.
Die folgende Grafik zeigt ein Beispiel von Daten, die erstellt werden müssen, um benutzerdefinierte Formeln hinzuzufügen:
Die Registerkarte "Formelsätze" dient zum Auswählen vordefinierter Formelsätze, die für die Berechnung der einer Operation zugeordneten Zeiten und Kosten verwendet werden können. Zum Beispiel ein Satz mit Standardzeit- und -kostenformeln und ein Satz mit regelmäßig auszuführenden Zeit- und Kostenformeln. Diese Formelsätze berücksichtigen die Anzahl der in der Operation zu produzierenden Teile und verwenden die für das Arbeitszentrum definierten Spezifikationen (z.B. Einrichtungszeit, Warteschlangenzeit). Formeln und Formelsätze werden verwendet, wenn die Aktion Zeit und Kosten berechnen ausgewählt wurde und Prozesspläne und Operationen in den Gantt-Fertigungsexplorer geladen werden.
Einem Arbeitszentrum können zwar mehrere Formelsätze zugeordnet werden. Es kann jedoch nur ein Formelsatz als Standardformelsatz für das Arbeitszentrum festgelegt werden. Dieser Formelsatz wird einer Operation zugeordnet, wenn das Arbeitszentrum dieser Operation zugeordnet wird.
* 
Formeln müssen einen Formelsatz zugewiesen werden. Wenn Sie keinen vorhandenen Formelsatz haben, müssen Sie einen definieren, bevor Sie eine benutzerdefinierte Formel definieren. Der Produktstruktur-Explorer kann so angepasst werden, dass Sie den Produktstruktur-Explorer verwenden können, um zusätzliche Werte zu Ihren benutzerdefinierten Formelsätzen hinzuzufügen. Weitere Informationen finden Sie in der PSE-Dokumentation.
Gehen Sie wie folgt vor, um benutzerdefinierte Formel zu erstellen:
1. Laden Sie mit dem Dienstprogramm "LoadFromFile" eine XML-basierte Ladedatei, wobei <csvname> im System eindeutig ist. Diese Ladedatei muss alle folgenden Elemente enthalten:
csvFormulaSet - Hierdurch wird ein FormulaSet-Objekt erstellt.
csvFormulaMetaData - Hierdurch wird ein FormulaMetaData-Objekt erstellt.
csvAddFormulaMetaData - Hierdurch wird das FormulaMetaData-Objekt mit dem FormulaSet-Objekt verknüpft.
<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. Erstellen Sie Formelmetadaten, indem Sie eine Verknüpfung mit einem Java-Klassennamen, der die Formelschnittstelle implementiert und einen Wert zurückgibt. Zum Beispiel FloatingPointWithUnits.
Laden Sie mit dem Dienstprogramm "LoadFromFile" eine XML-basierte Ladedatei, wobei <csvname> im System eindeutig ist <csvformulaClassName> die Java-Klasse ist, die die Formelschnittstelle implementiert.
<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. Verknüpfen Sie die Formelmetadaten mit dem Formelsatz, indem Sie einen Attributnamen verwenden.
Wenn beispielsweise der Dienst zur Berechnung der Formel aufgerufen wird, werden alle Formelmetadaten, die dem Formelsatz zugeordnet sind, ausgeführt, und eine Zuordnung aller berechneten Werte wird mithilfe des Attributnamens als Schlüssel zurückgegeben.
Laden Sie mit dem Dienstprogramm "LoadFromFile" eine XML-basierte Ladedatei, wobei <csvattributeName> das wiederverwendbare Attribut für Zeit und Kosten im MPMOperations-Objekt ist.
<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>
Beim Erstellen einer Java-Klasse, die die Formelschnittstelle implementiert, kann standardmäßig in der Eingabezuordnung auf diese Eingaben zugegriffen werden.
FormulaHelper.FORMULAVALUATED: Objekt, in dem der Formelsatz verknüpft wird und das in ForumlaValuated umgewandelt wird.
FormulatHelper.FORMULAVALUATED_TI: Objekttypinstanz, in der der Formelsatz verknüpft und die in TypeInstance umgewandelt wird. Diese kann Null sein.
FormulaHelper.FORMULAVALUATED_ATTRIBUTE_NAME: Attributname, der zum Verknüpfen der Formelmetadaten mit dem Formelsatz verwendet und der in eine Zeichenfolge umgewandelt wird. Dieser wird als Schlüssel in der Ergebniszuordnung verwendet.
FormulaHelper.LOT: Vom Benutzer im Kontext der Aktion "Zeit und Kosten berechnen" angegebener Loswert. Dieser wird in "Doppelt" umgewandelt.
Im folgenden Beispiel ist eine Formel-Java-Klasse dargestellt:
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));
}
}
* 
Es ist auch möglich, weitere Eingaben für die Formel hinzuzufügen, indem eine neue Aktion erstellt wird und dann Formeldienste verwendet werden, um das Ausführen des Formelsatzes aufzurufen. Weitere Informationen zum Erstellen neuer Aktionen finden Sie in der PSE-Dokumentation.