Zusätzliche Funktionen > Serviceinformationsverwaltung > Windchill Service Information Manager und Windchill Service Parts anpassen > Publizierung anpassen > Erweiterte Anpassung der Publizierung
  
Erweiterte Anpassung der Publizierung
Erweiterungspunkte für die Publizierung
Es gibt einige Punkte während der Payload-Erstellung oder -Verarbeitung, an denen eine Anpassung implementiert werden kann. Sie können auch einen Post Conversion Delegate implementieren.
Service Structure Traversing
Dieser ServiceStructureTraversing Delegate für die allgemeine Verwendung ändert die Ausgabe-Servicestrukturen, die ohne Auswirkungen auf die Eingabe-Servicestruktur serialisiert werden. Dieser Delegate gilt für Durchläufe im Allgemeinen, einschließlich Übersetzung und Publizierung.
Registrierung
Registrieren Sie den ServiceStructureTraversing Delegate, indem Sie Folgendes zur Datei service.properties.xconf hinzufügen:
<Service context="default" name="com.ptc.arbortext.windchill.siscore.
traversal.ServiceStructureTraversing">
<Option serviceClass="YourCustomTraversingClassName
requestor="wt.part.WTPart" selector="null"/>
</Service>
Schnittstelle ServiceStructureTraversing
package com.ptc.arbortext.windchill.siscore.traversal;
import java.util.List;
import wt.part.WTPart;
import wt.util.WTException;
/*
* Interface that allows customization of the nodes returned from
* StandardTraversalService.
* Children may be added, removed and reordered.
*/
public interface ServiceStructureTraversing {
boolean children(WTPart parent, List<pubNode> children)
throws WTException;
}
API-Methode children()
Gibt true zurück, um den geänderten Wert des Parameters children in der nächsten Phase des Durchlaufs zu verwenden.
Diese Methode wird aufgerufen, bevor die Kinder jedes Knotens besucht werden. Die Methode unterstützt:
das Hinzufügen von Kind-Knoten
das Entfernen von Kind-Knoten
das Neuanordnen von Kind-Knoten
Parameter:
parent
Servicestrukturknoten, den der Durchlaufcode aktuell besucht
children
Kind-Knoten des Parameters parent
Custom Content Ready Checker
Der CustomContentReadyChecker Delegate überprüft jedes dynamische Dokument (einschließlich Member-Links der zusammengesetzten Dokumente und Grafiken, die aus Teilelisten referenziert werden) während der Publizierung und bestimmt, ob der Inhalt für die Publizierung bereit ist. Dieser Delegate wird verwendet, um zu bestimmen, ob Übersetzungen bereit sind, jedoch auch, um festzulegen, ob das Dokument selbst bereit ist.
Der Publizierregelparameter OnContentHolderLinkFailed definiert, wie die Publizieranfrage verarbeitet werden soll, wenn ein Dokument oder seine Übersetzung nicht bereit ist.
Registrierung
Registrieren Sie den CustomContentReadyChecker Delegate, indem Sie Folgendes zur Datei service.properties.xconf hinzufügen:
<Service name="com.ptc.arbortext.windchill.publisher.
CustomContentReadyChecker">
<Option serviceClass="CustomContentCheckerClassName"
requestor="null" selector="null"/>
</Service>
Schnittstelle CustomContentReadyChecker
package com.ptc.arbortext.windchill.publisher;
import wt.fc.Persistable;
import wt.util.WTException;
import com.ptc.arbortext.windchill.publisher.payload.PayloadContext;
public interface CustomContentReadyChecker {
boolean isTranslatedContentReady(
Persistable source,
Persistable trans,
PayloadContext context) throws WTException;
// if PTC_DD_TRANSLATE=="yes" && lang set
boolean isContentReady(
Persistable source,
PayloadContext context) throws WTException; // else this
}
API-Methode isTranslatedContentReady()
Gibt true zurück, wenn das Dokument bereit ist, oder false, wenn es nicht bereit ist.
Diese Methode überprüft den Status des Dokuments und seiner Übersetzung, um zu bestimmen, ob diese publiziert werden können.
Parameter:
source
Inhalt des Dokuments
trans
Übersetzter Inhalt des Dokuments
context
Payload-Kontext, der Publikationsregelparameter und andere Publizierinformationen enthält
API-Methode isContentReady()
Gibt true zurück, wenn das Dokument bereit ist, oder false, wenn es nicht bereit ist.
Diese Methode prüft den Status des Dokuments, um zu bestimmen, ob es publiziert werden kann.
Parameter:
source
Inhalt des Dokuments
context
Payload-Kontext, der Publikationsregelparameter und andere Publizierinformationen enthält
Security Label Aggregator
Der SecurityLabelAggregator Delegate legt die Sicherheitsbeschriftungen für eine publizierte Darstellung auf Grundlage der publizierten Daten und ihren Sicherheitsbeschriftungen fest.
Während der Publizierung sammelt Windchill Service Information Manager die Sicherheitsbeschriftungen für jedes der Elemente, die für die Payload gesammelt werden, und wendet ein Sicherheitsbeschriftungsattribut an. Sie können die Sicherheitsbeschriftungshierarchie für die Elementsammlung mithilfe der Schnittstelle SecurityLabelAggregator definieren, die Sicherheitsbeschriftungen basierend auf der Geschäftslogik aggregiert.
Die Benutzeroberfläche verarbeitet Sicherheitsbeschriftungen für Folgendes:
alle WTParts in der Struktur
alle verknüpften WTDocument-, EPMDocument-, Grafik- und Teilelistenobjekte
alle mit Dokumenten verknüpften Fragmente
alle mit Teilelisten und Dokumenten verknüpften Grafiken
alle Darstellungen in den Daten
* 
Referenzierte Objekte werden ausgeschlossen, außer wenn ihr Inhalt auch in der Payload enthalten ist (nicht nur ihre Metadaten).
Sicherheitsbeschriftungen werden für die Paketpublizierung nicht unterstützt.
Registrierung
Registrieren Sie den SecurityLabelAggregator Delegate, indem Sie Folgendes zur Datei service.properties.xconf hinzufügen:
<Service name="com.ptc.arbortext.windchill.publisher.
SecurityLabelAggregator">
<Option serviceClass="CustomSecurityLabelAggregatorClassName"
requestor="null" selector="null"/>
</Service>
Schnittstelle SecurityLabelAggregator
package com.ptc.arbortext.windchill.publisher;
import java.util.Map;
import wt.access.SecurityLabeled;
import wt.util.WTException;
public interface SecurityLabelAggregator {
/**
*
* @param mergeTo is the output. Initially it has other labels
* @param finalTarget is the object in which the final result is saved
* @param mergeFrom is a collection of labels that will be merged to
* mergeTo.
* @param mergeFromObject is the object where mergeFrom is retrieved.
* If mergeFromObject is a representation, its target object
* is used.
* @param options are the parameters that can be used to control the
* merging.
* @throws WTException, when thrown, the current publish job fails.
*/
public void aggregate(Map<String, String> mergeTo,
SecurityLabeled finalTarget, Map<String, String> mergeFrom,
SecurityLabeled mergeFromObject, Map<String, String> options)
throws WTException;
/**
*
* The method tests if the security labels need the PE alternate
* transaction archive.
* If there is a label called ITAR, an implementation could return true.
* PE would put the publish job's transaction archive in the alternate
* archive.
* @param securityLabels are the aggregated security labels
* @param options parameters
* @return true if secure and false if public
*/
public boolean isSecured(Map<String, String> securityLabels,
Map<String, String> options) throws WTException;
}
API-Methode aggregate()
Gibt nichts zurück.
Diese Methode legt die letzte Sicherheitsbeschriftung der Zieldarstellung auf Grundlage der Sicherheitsbeschriftungen aller Daten fest, die in einer Payload gesammelt werden.
Parameter:
mergeTo
Sammlung von Sicherheitsbeschriftungen für finalTarget. Wenn die Methode aufgerufen wird, enthält diese Variable möglicherweise bereits einige Sicherheitsbeschriftungen.
finalTarget
Objekt, in dem die endgültigen Sicherheitsbeschriftungen gespeichert werden.
mergeFrom
Sammlung von Sicherheitsbeschriftungen für mergeFromObejct. Diese Sicherheitsbeschriftungen bestimmen, wie die endgültigen Sicherheitsbeschriftungen festgelegt werden.
mergeFromObject
Objekt, das mehrere Sicherheitsbeschriftungen enthält
options
Zuordnung der Publizierregelparameter und ihrer Werte
API-Methode isSecured()
Gibt true oder false zurück.
Die Methode prüft die aggregierten endgültigen Sicherheitsbeschriftungen und bestimmt, ob die publizierte Darstellung gesichert werden soll. Wenn isSecured()true zurückgibt, muss die publizierte Darstellung in einem sicheren Ordner platziert werden. Das sichere Transaktionsarchiv muss auf der Arbortext Publishing Engine konfiguriert werden.
Parameter
securityLabels
Endgültige Sicherheitsbeschriftungen für Sicherheit
options
Zuordnung der Publizierregelparameter und ihrer Werte
Elementfilter
Der ElementFilter Delegate ermöglicht es dem Benutzer, Informationselemente aus Servicestruktur-Payloads auszuschließen. Beispielsweise kann dieser Delegate die Informationselemente mit bestimmten Sicherheitsbeschriftungen aus Payloads ausschließen.
Ein Inhaltsobjekt (wie EPMDocument) oder eine Teileliste sollte gefiltert werden, wenn eines der Kind-Elemente gefiltert wird. Andernfalls riskieren Sie die Publizierung eines unvollständigen Dokuments oder einer unvollständigen Teileliste, was Fehler verursachen kann.
Registrierung
Registrieren Sie den ElementFilter Delegate, indem Sie Folgendes zur Datei service.properties.xconf hinzufügen:
<Service name="com.ptc.arbortext.windchill.publisher.payload.ElementFilter">
<Option serviceClass="CustomElementFilterClassName"
requestor="null" selector="null"/>
</Service>
Schnittstelle ElementFilter
package com.ptc.arbortext.windchill.publisher.payload;
import wt.fc.Persistable;
import wt.fc.collections.WTList;
import wt.util.WTException;
/**
* An interface that is used to filter information elements based on
* customized criteria. Only one instance is used for the whole payload.
*
*/
public interface ElementFilter {
/**
*
* @param context
* @param curElement it could be WTPart, PartList
* @param associated a list of Persistable objects. If the current
* element is a structured document, such as dynamic document,
* only its root dynamic document is included.
* Depending on business logic, users may need to check the children.
* @return true means we don't include the Element. Otherwise,
* include the element. If the element is not included and the
* publishing stops, an exception is expected.
* @throws WTException
*/
public boolean filter(PayloadContext context, Persistable curElement,
WTList associated) throws WTException;
}
API-Methode filter()
Gibt true zurück, um curElement aus der Payload auszuschließen. Gibt false zurück, um curElement einzuschließen.
Diese Methode prüft jedes Informationselement in der Servicestruktur, um zu bestimmen, ob es gefiltert werden soll.
Parameter:
context
Payload-Kontext, der Publikationsregelparameter und andere Informationen enthält.
curElement
Servicestrukturknoten, Teileliste oder Teilelistenillustration, die möglicherweise der Payload hinzugefügt wird.
associated
Sammlung persistent zu machender Objekte, die curElement zugeordnet ist. Wenn beispielsweise curElement ein Informationsstrukturknoten ist, der auf ein dynamisches Dokument verweist, enthält der Parameter associated das dynamische Dokument.
Custom Metadata Source Provider
Der CustomMetaDataSourceProvider Delegate ermöglicht es dem Benutzer, zusätzliche Metadatenquellen für beliebige Teilelistenelemente oder Knoten in einer Servicestruktur bereitzustellen. Die zusätzlichen Metadatenquellen werden an vorhandene Metadatenquellen angehängt und dann in XML-Dateien serialisiert. Gewöhnlich werden Metadatenquellen aus jedem Strukturknoten und jedem Teilelistenelement auf Grundlage der Einstellungen in der Datei publishable_attset.xml gesammelt. Weitere Informationen finden Sie unter Attribute konfigurieren.
Registrierung
Registrieren Sie den CustomMetaDataSourceProvider Delegate, indem Sie Folgendes zur Datei service.properties.xconf hinzufügen:
<Service name="com.ptc.arbortext.windchill.siscore.operation.
CustomMetaDataSourceProvider">
<Option serviceClass="CustomMetaDataSourceProviderClassName"
requestor="null" selector="wt.part.WTPart|com.ptc.sis.Base|
com.ptc.sis.BaseDiv "/>
</Service>
Schnittstelle CustomMetaDataSourceProvider
package com.ptc.arbortext.windchill.siscore.operation;
import java.util.List;
import wt.fc.ObjectToObjectLink;
import wt.fc.Persistable;
import wt.util.WTException;
public interface CustomMetaDataSourceProvider {
List<SISMetaDataSource> getCustomDataSources(Persistable targetNode,
ObjectToObjectLink linkToNode,
Persistable rootNode,
SISOperationServerContext hookContext) throws WTException;
}
API-Methode getCustomDataSources()
Gibt eine Sammlung benutzerdefinierter Metadatenquellen zurück, die an vorhandene Metadatenquellen angehängt und in den Zielknoten serialisiert werden.
Diese Methode sammelt weitere Metadaten für angegebene Quellen.
Parameter:
targetNode
Der Wert kann einer der folgenden Werte sein:
Knoten, der zum Zeitpunkt des Methodenaufrufs in der Informationsstruktur oder Publikationsstruktur besucht wird
wt.part.WTPart verknüpft von einer Teileliste, wenn ein Teilelistenobjekt serialisiert wird
Inhaltsobjekt, das der Payload hinzugefügt wird, wie ein dynamisches Dokument, wenn die Metadaten des Objekts im Manifest erforderlich sind
linkToNode
Link zu targetNode vom Eltern-Knoten zum Zeitpunkt des Methodenaufrufs. Dies kann null für den Stammknoten oder für Knoten sein, die vom ServiceStructureTraversing Delegate zur Struktur hinzugefügt werden. In einem Teilelistenelement ist dies das PartListItem, das mit wt.part.WTPart verknüpft ist. Für Inhaltsobjekte kann es sich um einen speziellen Link handeln, wie EPMDescribedByLink.
rootNode
Stamm der Servicestruktur oder eines Teilelistenobjekts.
hookContext
SISOperationServerContext-Kontext, der Informationen zum Typ der ausgeführten Operation und zu den auf die Struktur angewendeten Filtern bietet.
Benutzerdefinierte Metadatenübersetzungen bereitstellen
Wenn Sie mit übersetzten benutzerdefinierten Metadaten arbeiten, verwenden Sie die Methode addTranslation() der PropertyValue-Klasse RawMetaDataSource. Beispiel:
RawMetaDataSource.Property p = new RawMetaDataSource.
Property("token2", "property_type", null, authorLang);
p.setLocalizable(true);
RawMetaDataSource.PropertyValue v = new RawMetaDataSource.
PropertyValue("value12", "value_token", "value_key");
v.addTranslation("fr", "value12_fr");
v.addTranslation("de", "value12_de");
p.addValue(v);
properties.add(p);
data.setProperties(properties);
Metadatenergebnisse für Französisch (Bündelstandard):
<Metadata source="RawSoftType">
<Property name="token2">
<Value xml:lang="en" transidref="...">value12</Value>
<Value xml:lang="en" transidref="...">value12_2</Value>
</Property>
</Metadata>
Metadatenergebnisse in translation.xml (PDF-Standard):
<Target xml:lang="fr">
...
<Value transid="07ecb4cfd68fab55">value12_fr</Value>
<Value transid="07ecb4cfd68fse54">value12_2_fr</Value>
...
</Target>
Der Delegate kann Localizable auf true festlegen. Eigenschaftswerte haben dann eine Übersetzung, die im Bündel angezeigt werden kann. Die Methode addTranslation() kann benutzerdefinierte Übersetzungen für eine bestimmte Sprache bereitstellen. Delegates können mehrere Übersetzungen für einen PropertyValue aufweisen. Wenn das Paket für eine bestimmte Sprache publiziert wird, wird die entsprechende Übersetzung (wenn angegeben) im Bündel angezeigt.
Wenn eine Eigenschaft als lokalisierbar gekennzeichnet ist, aber der Delegate keine Übersetzung für die zu publizierende Zielsprache bietet, schlägt der Publizierjob fehl (wenn die Publizierregel CompleteTranslationCheck auf true festgelegt ist).
Benutzerdefinierte Metadaten für aggregierte Zeitstempel vergleichen
In benutzerdefinierten Metadaten werden Details des aggregierten Zeitstempels durch das Attribut SIM.lastUpdated für die Teileliste und das Attribut SIM.lastUpdatedMetadata für EPM-Dokumente bereitgestellt. Verwenden Sie die Methode getTimeStamp() aus der Klasse AttributeMetaDataSource in RawMetadasource im Delegate CustomMetaDataSourceProvider.
Bei der Publizierung wird der Wert eingeschlossen, der von getTimeStamp() für den Stamminhalt zurückgegeben wird, d.h. dynamische Dokumente unter der Mappe und die Teileliste; der Rest des Inhalts wird ignoriert. Beispiel: Wenn benutzerdefinierte Daten des dynamischen Kind-Dokuments den Zeitstempel ebenfalls enthalten, wird diese Information bei der Publizierung nicht in den berechneten Zeitstempel des Elternteils eingeschlossen.
Der Zeitstempel wird von RawMetadasource zurückgegeben und in der Klasse AttributeMetaDataSource definiert.
public class AttributeMetaDataSource implements SISMetaDataSource {
private WTReference targetRef;
protected List<Property> properties;
protected List<Object> incrementalList;
protected long timeStamp;
ManifestCustomMetaDataSourceProvider
Der ManifestCustomMetaDataSourceProvider-Delegate fügt Metadatenquellen für Inhalt hinzu und entfernt diese; außerdem fügt er neue Attribute zu vorhandenen Metadaten in der Datei manifest.xml der Payload hinzu. Die zusätzlichen Metadatenquellen werden an vorhandene Metadatenquellen angehängt und dann in XML-Dateien serialisiert. Eine typische vorhandene Metadatenquelle ist z.B. Dienstgültigkeit. Beim Serialisieren von Dienststrukturinhalt (z.B. dynamische Dokumente, Teilelisten) für die Payload werden Metadatenquellen auf Grundlage der Einstellungen in der Datei manifest_attset.xml gesammelt. Weitere Informationen finden Sie unter Attribute konfigurieren.
Registrierung
Registrieren Sie den ManifestCustomMetaDataSourceProvider Delegate, indem Sie Folgendes zur Datei service.properties.xconf hinzufügen:
<Service name="com.ptc.arbortext.windchill.siscore.operation.
ManifestCustomMetaDataSourceProvider">
<Option cardinality="singleton" serviceClass=
"ManifestCustomMetaDataSourceProviderClassName"
requestor="null" />
</Service>
Das Selektorattribut gibt den Kontext an. Die Klasse wird als Singleton registriert. Stellen Sie sicher, dass das Objekt in mehreren Threads gleichzeitig wiederverwendet werden kann.
Schnittstelle ManifestCustomMetaDataSourceProvider
package com.ptc.arbortext.windchill.siscore.operation;
import java.util.List;
import java.util.Map;
import wt.fc.WTReference;
import wt.fc.collections.WTKeyedMap;
import wt.util.WTException;
public interface ManifestCustomMetaDataSourceProvider {
/**
*
* @param currentData
* @param hookContext
* @return
* @throws WTException
*/
Map<WTReference, List<SISMetaDataSource>> getCustomDataSources
(WTKeyedMap currentData,SISOperationServerContext hookContext)
throws WTException;
}
API-Methode getCustomDataSources()
Gibt eine Zuordnung von Zielreferenzen und ihre benutzerdefinierten Metadateninformationen zurück.
Parameter:
currentData
Der Wert ist eine Zuordnung von Zielreferenzen und ihren Kindern.
hookContext
SISOperationServerContext-Kontext, der Informationen zum Typ der ausgeführten Operation und zu den auf die Struktur angewendeten Filtern bietet.
Beispiel für das Hinzufügen von Metadaten
Initialisieren Sie ein OperationMetaDataSource-Objekt.
OperationMetaDataSource om = new OperationMetaDataSource
(OperationMetaDataSource.E_Operation.Add);
WTArrayList list = new WTArrayList();
list.add(PersistableObject);
om.setTargets(list);
Geben Sie das OperationMetaDataSource-Objekt zurück.
Map<WTReference, List<SISMetaDataSource>> ret = new HashMap
<WTReference, List<SISMetaDataSource>>
List<SISMetaDataSource> src = new ArrayList<SISMetaDataSource>()
src.add(om);
ret.put(targetRef, src);
Beispiel für das Entfernen von Metadaten
Initialisieren Sie ein OperationMetaDataSource-Objekt.
OperationMetaDataSource om = new OperationMetaDataSource
(OperationMetaDataSource.E_Operation.Remove);
WTArrayList list = new WTArrayList();
list.add(PersistableObject);
om.setTargets(list);
Geben Sie das OperationMetaDataSource-Objekt zurück.
Map<WTReference, List<SISMetaDataSource>>
ret = new HashMap<WTReference,
List<SISMetaDataSource>>List<SISMetaDataSource> src = new
ArrayList<SISMetaDataSource>();
src.add(om);
ret.put(targetRef, src);
Beispiel für das Hinzufügen eines Attributs zu vorhandenen Metadaten
Initialisieren Sie ein AttributeMetaDataSource-Objekt.
AttributeMetaDataSource am = new AttributeMetaDataSource(ref);
List<RawMetaDataSource.Property> properties = new ArrayList
<RawMetaDataSource.Property>();
RawMetaDataSource.Property p = new RawMetaDataSource.Property
("NewCustomAttributeId", null);
RawMetaDataSource.PropertyValue v = new RawMetaDataSource.PropertyValue
(ref.toString(), null, null);
p.addValue(v);
properties.add(p);
am.setProperties(properties);
Geben Sie das AttributeMetaDataSource-Objekt zurück.
Map<WTReference, List<SISMetaDataSource>>
ret = new HashMap<WTReference,
List<SISMetaDataSource>>List<SISMetaDataSource> src = new
ArrayList<SISMetaDataSource>();
src.add(am);
ret.put(targetRef, src);
Benutzerdefinierte Metadatenübersetzungen bereitstellen
Wenn Sie mit übersetzten benutzerdefinierten Metadaten arbeiten, verwenden Sie die Methode addTranslation() der PropertyValue-Klasse RawMetaDataSource. Beispiel:
RawMetaDataSource.Property p = new RawMetaDataSource.
Property("token2", "property_type", null, authorLang);
p.setLocalizable(true);
RawMetaDataSource.PropertyValue v = new RawMetaDataSource.
PropertyValue("value12", "value_token", "value_key");
v.addTranslation("fr", "value12_fr");
v.addTranslation("de", "value12_de");
p.addValue(v);
properties.add(p);
data.setProperties(properties);
Metadatenergebnisse für Französisch (Bündelstandard):
<Metadata source="RawSoftType">
<Property name="token2">
<Value xml:lang="en" transidref="...">value12</Value>
<Value xml:lang="en" transidref="...">value12_2</Value>
</Property>
</Metadata>
Metadatenergebnisse in translation.xml (PDF-Standard):
<Target xml:lang="fr">
...
<Value transid="07ecb4cfd68fab55">value12_fr</Value>
<Value transid="07ecb4cfd68fse54">value12_2_fr</Value>
...
</Target>
Der Delegate kann Localizable auf true festlegen. Eigenschaftswerte haben dann eine Übersetzung, die im Bündel angezeigt werden kann. Die Methode addTranslation() kann benutzerdefinierte Übersetzungen für eine bestimmte Sprache bereitstellen. Delegates können mehrere Übersetzungen für einen PropertyValue aufweisen. Wenn das Paket für eine bestimmte Sprache publiziert wird, wird die entsprechende Übersetzung (wenn angegeben) im Bündel angezeigt.
Wenn eine Eigenschaft als lokalisierbar gekennzeichnet ist, aber der Delegate keine Übersetzung für die zu publizierende Zielsprache bietet, schlägt der Publizierjob fehl (wenn die Publizierregel CompleteTranslationCheck auf true festgelegt ist).
Benutzerdefinierte Manifest-Metadaten für aggregierte Zeitstempel vergleichen
In benutzerdefinierten Metadaten werden Details des aggregierten Zeitstempels durch das Attribut SIM.lastUpdated für die Teileliste und das Attribut SIM.lastUpdatedMetadata für EPM-Dokumente bereitgestellt. Verwenden Sie die Methode getTimeStamp() aus der Klasse AttributeMetaDataSource in RawMetadasource im Delegate ManifestCustomMetadataSourceProvider.
Bei der Publizierung wird der Wert eingeschlossen, der von getTimeStamp() für den Stamminhalt zurückgegeben wird, d.h. dynamische Dokumente unter der Mappe und die Teileliste; der Rest des Inhalts wird ignoriert. Beispiel: Wenn benutzerdefinierte Daten des dynamischen Kind-Dokuments den Zeitstempel ebenfalls enthalten, wird diese Information bei der Publizierung nicht in den berechneten Zeitstempel des Elternteils eingeschlossen.
public class AttributeMetaDataSource implements SISMetaDataSource {
private WTReference targetRef;
protected List<Property> properties;
protected List<Object> incrementalList;
protected long timeStamp;
* 
Die von diesem Programmeinstieg zurückgegebenen Metadaten werden nicht für die inkrementelle Publizierung überwacht.
Custom Translation Hook
CustomTranslationHook kann übersetzte Werte für Windchill Attribute während der Publizierung abrufen. Der Rückgabewert null bedeutet, dass keine Übersetzung verfügbar ist. Die publizierte Ausgabe wird in translation.xml eingeschlossen. Die angegebenen Attribute müssen in die Konfigurationsdatei localizable_attset.xml eingeschlossen werden, um in die Payload eingeschlossen zu werden.
Registrierung
Registrieren Sie den Custom Translation Hook Delegate, indem Sie einen Eintrag wie folgenden zur Datei sis.service.properties.xconf hinzufügen:
<Service name="com.ptc.arbortext.windchill.siscore.CustomTranslationHook">
<Option serviceClass="YourCustomTranslationHookClassName"
requestor="null" selector="null"/>
</Service>
Schnittstelle CustomTranslationHook
package com.ptc.arbortext.windchill.siscore.translation;
import wt.util.WTException;
public abstract class CustomTranslationHook {
/**
*
* @param softtype Windchill soft type name
* @param attributeName Windchill soft attribute name
* @param sourceLanguage source or authored language of attributeValue
* @param attributeValue attributeValue to fetch translation for
* @param targetLanguage target language of translation to fetch
* @throws WTException
*/
public abstract String translateAttribute(String softtype,
String attributeName, String sourceLanguage,
String attributeValue, String targetLanguage)
throws WTException;
}
API-Methode translateAttribute()
Diese Methode gibt das Attribut an, für das Sie einen übersetzten Attributwert abrufen möchten.
Der zurückgegebene Wert ist eine übersetzte Zeichenfolge für das angegebene Attribut, wenn eine Übersetzung vorhanden ist. Wenn die Methode null zurückgibt oder eine Ausnahme ausgibt, ist keine Übersetzung verfügbar, und die Quellattribut-Zeichenfolge wird verwendet.
Parameter:
softtype
Windchill Untertyp der Servicestruktur
attributeName
Windchill Untertyp-Attributname
sourceLanguage
Quelle oder Erstellungssprache von attributeValue
attributeValue
Attributwert, für den eine Übersetzung abgerufen werden soll
targetLanguage
Zielsprache, für die eine Übersetzung abgerufen werden soll
Benutzerdefinierter Ordner in der Payload
Der Delegate CustomArtifactProvider stellt einen Programmeinstieg bereit, der es ermöglicht, benutzerdefinierte Artefakte in das Payload-Bündel einzuschließen.
Registrierung
Registrieren Sie den CustomArtifactProvider, indem Sie einen Eintrag wie den folgenden zu der Datei sis.service.properties.xconf hinzufügen:
<Service name="com.ptc.arbortext.windchill.publisher.payload.CustomArtifactProvider">
<Option serviceClass="YourCustomArtifactProviderImplementation"
requestor="null" selector="null"/>
</Service>
Schnittstelle CustomArtifactProvider
package com.ptc.arbortext.windchill.publisher.payload;
import com.ptc.wvs.common.util.VSResult;
import wt.util.WTException;
public interface CustomArtifactProvider {
/**
* This method is passed the path for a newly created empty temporary
* directory as well as the payload context object.
* @param tempDirPath : empty temporary directory
* @param context : payload context object
* @return VSResult.SUCCESSFUL or VSRESULT.FAIL
* @throws WTException
*/
public VSResult initiateCustomFolder(String tempDir, PayloadContext context) throws WTException;
/**
* If the method returns VSResult.SUCCESSFUL, then the contents of the directory
* will be copied to the custom folder in the payload.
Otherwise if the method returns VSRESULT.FAIL, the temporary directory
will be permanently deleted with including its content in the payload.
* @return VSResult.SUCCESSFUL or VSRESULT.FAIL
* @throws WTException
*/
public VSResult publishCustomFolder() throws WTException;
/**
* cleanUp is called regardless what happens to publish
* to clean up resources in customization.
*/
public void cleanUp();
API-Methode initiateCustomFolder()
Bei dieser Methode werden der Pfad für ein leeres temporäres Verzeichnis, das neu erstellt wurde, sowie das Payload-Kontextobjekt übergeben. Wenn VSResult.FAIL zurückgegeben wird, wird der Publizierjob gestoppt und gibt einen Fehler zurück.
Parameter:
tempDir
leeres temporäres Verzeichnis
context
Payload-Kontextobjekt
Gibt VSResult.SUCCESSFUL oder VSRESULT.FAIL zurück
API-Methode publishCustomFolder()
Mit dieser Methode wird der Inhalt des temporären Verzeichnisses geändert. Zum Beispiel durch das Zippen einiger Artefakte.
Gibt VSResult.SUCCESSFUL oder VSRESULT.FAIL zurück. Wenn die Methode VSResult.SUCCESSFUL zurückgibt, werden die Inhalte des Verzeichnisses in den benutzerdefinierten Ordner in der Payload kopiert. Wenn die Methode VSRESULT.FAIL zurückgibt, wird das temporäre Verzeichnis permanent mit seinem Inhalt in der Payload gelöscht.
Methode zum Kodieren von Verzeichnis- und Dateinamen
Das Dienstprogramm encodePayloadFileName verwendet eine Prozentformatkodierung, um Sonderzeichen zu kodieren, die möglicherweise im Dateinamen eines Verzeichnisses oder Artefakten in der Payload oder im Publizierungsbündel vorhanden sind. Das Dienstprogramm ersetzt die Sonderzeichen und die nicht alphanumerischen Zeichen in den Dateinamen mit einem Unterstrichzeichen (_), gefolgt von den Hexadezimalwerten (#) der Zeichen, die ersetzt werden.
Folgende Zeichen werden bei der Kodierung nicht ersetzt:
A-Z (lateinische Großbuchstaben)
a-z (lateinische Kleinbuchstaben)
0–9 (arabische Zahlen)
. (Punkt)
~ (Tilde)
Methodensignatur für das Dienstprogramm:
public static String encodePayloadFileName(String fname)
Vollständig qualifizierte Methodensignatur für das Dienstprogramm:
com.ptc.arbortext.windchill.publisher.payload.util.FileNameUtil.encodePayloadFileName(String fname)
Wobei fname der Dateiname ist.
Inaktive Produkthierarchieknoten publizieren
Der CustomPHHook erkennt Produkthierarchieknoten außerhalb der Produkthierarchiestruktur und publiziert sie als inaktive Knoten. Wenn der Knoten Teil der Struktur ist, wird er als inaktiv gekennzeichnet. Wenn nicht, wird er als Kind der Stamm-PH eingefügt und als inaktiv gekennzeichnet.
Registrierung
Registrieren Sie Ihren benutzerdefinierten Programmeinstiegs-Delegate für die Produkthierarchie, indem Sie einen Eintrag wie den folgenden zur Datei sis.service.properties.xconf hinzufügen:
<Service name="com.ptc.arbortext.windchill.publisher.payload.CustomPHHook">
<Option cardinality="singleton" serviceClass="YourCustomPHHook"
requestor="null" selector="null"/>
</Service>
Schnittstelle CustomPHHook
package com.ptc.arbortext.windchill.publisher.extract;
import com.ptc.arbortext.windchill.publisher.payload.PayloadContext;
import wt.fc.collections.WTCollection;
import wt.filter.NavigationCriteria;
import wt.part.WTPart;
import wt.util.WTException;
Public abstract class CustomPHHook {
public abstract WTCollection getInactivePHNodes(WTPart rootPH, NavigationCriteria phNC, PayloadContext payloadContext);
}
API-Methode getInactivePHNodes()
Gibt eine Sammlung von WTParts aus, bei denen es sich um inaktive Knoten in einer Produkthierarchie handelt. Wenn die Methode einen Knoten zurückgibt, der nicht Teil der Produkthierarchie ist, oder wenn das Objekt kein WTPart ist, wird eine Ausnahme ausgelöst. Wenn die Methode einen Knoten oder ein Teil außerhalb der Produkthierarchiestruktur wiedergibt, wird der Knoten als neues Produkthierarchie-Informationselement in der Struktur hinzugefügt.
Parameter:
rootPH
Stamm der Produkthierarchiestruktur
phNC
Produkthierarchie-Navigationskriterien
payloadContext
Kontext
Post Convert Delegate
Der PostConvertDelegate ermöglicht es dem Benutzer eine zurückgegebene Antwort von Arbortext Publishing Engine nach einem Publizierjob nachzuverarbeiten. Die Antwort enthält Informationen in der Datei composerlog.xml, die Fehler oder Warnungen aufweist. Diese Informationen sollten entweder eine Workflowaktion oder E-Mail-Benachrichtigung auslösen. Der Delegate wird aufgerufen, egal ob der Publizierjob erfolgreich ist oder fehlschlägt.
Wenn PostConvertDelegate eine Ausnahme ausgibt, wird die Ausnahme im WVS Protokoll vermerkt. Sie verursacht aber keine Änderung des Status des Publizierjobs.
Registrierung
Registrieren Sie den benutzerdefinierten Post Convert Delegate, indem Sie den WVS Publizierparameter PostConvertDelegate einer Publizierregel hinzufügen und den Klassennamen des benutzerdefinierten Delegate angeben. Beispiel:

<worker name="com.ptc.arbortext.wvs/PostConvertDelegate">
com.ptc.arbortext.windchill.publisher.CustomPostConvertDelegate</worker>
Schnittstelle PostConvertDelegate
package com.ptc.arbortext.windchill.publisher;
import java.io.InputStream;
import java.util.Map;
import com.ptc.wvs.common.util.VSResult;
import com.ptc.wvs.server.publish.PublishParams;
import wt.fc.collections.WTCollection;
import wt.representation.Representable;
import wt.representation.Representation;
import wt.util.WTException;
/**
* The abstract class is designed to invoke after the response is returned
* from PE whether the publish job fails or succeeds.
*/
public abstract class PostConvertDelegate {
/**
* The method is invoked after getting response from PE.
* Its result is displayed in the WVS monitor.
* Any exception it throws is logged in method server log,
* but doesn't affect existing publish process;
*
* @param representable is the target object
* @param targetRep is the targeted representation in the targeted object.
* It is not null only for republishing or incremental publishing.
* @param parameters are publishing parameters for this publishing job.
* @param responseStreams is the map that includes all the file names
* and file output streams
* @param publishedList is the list of content included in the payload.
* If it is null, audit is disabled.
* @return is the messages sent to WVS job monitor */
public abstract VSResult execute(Representable representable,
Representation targetRep,
PublishParams parameters,
Map<String, InputStream> responseStreams,
WTCollection publishedList) throws WTException;
}
API-Methode execute()
Der zurückgegebene Wert wird im WVS Auftragsmonitor angezeigt.
Diese Methode wird sofort aufgerufen, nachdem die Publizierjobantwort von der Arbortext Publishing Engine zurückgegeben wurde.
Parameter:
representable
Zielobjekt, das publiziert wurde
targetRep
Zieldarstellung im Zielobjekt. Dieser Parameter kann nur für die erneute und inkrementelle Publizierung verwendet werden. Wenn er nicht Null ist, enthält er die alte Darstellung des Zielobjekts. In allen anderen Fällen ist er Null.
parameters
Publizierregelparameter, die für diesen Publizierjob verwendet wurden
responseStreams
Zuordnung, die alle Dateinamen und Dateiausgabestreams für die Antwort enthält
publishedList
Sammlung der Inhalte in der Payload Er kann Null sein, wenn die Prüfung deaktiviert ist.