Personnalisation avancée de la publication
Points d'extension pour la publication
Dans le processus de création ou de traitement du champ de données, vous pouvez implémenter une personnalisation à différents points. Il est également possible d'implémenter un délégué après la conversion.
Traversée de structure de service
Ce délégué ServiceStructureTraversing d'utilisation générale modifie les structures de service de sortie sérialisées, sans affecter la structure de service d'entrée. Ce délégué s'applique à la traversée en général. Cela inclut la traduction et la publication.
Enregistrement
Enregistrez le délégué ServiceStructureTraversing en ajoutant la commande suivante dans un fichier service.properties.xconf :
<Service context="default" name="com.ptc.arbortext.windchill.siscore.
traversal.ServiceStructureTraversing">
<Option serviceClass="YourCustomTraversingClassName"
requestor="wt.part.WTPart" selector="null"/>
</Service>
Interface 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;
}
Méthode d'API children()
Renvoie true pour utiliser la valeur modifiée du paramètre children à l'étape suivante de la traversée.
Cette méthode est appelée avant la consultation des enfants de chaque noeud. Elle prend en charge les opérations suivantes :
ajout de noeuds enfants ;
suppression de noeuds enfants ;
réorganisation des noeuds enfants.
Paramètres :
parent
Noeud de structure de service que le code de traversée consulte actuellement.
children
Noeuds enfants du paramètre parent.
Contrôleur de préparation de contenu personnalisé
Le délégué CustomContentReadyChecker inspecte chaque document dynamique (y compris les liens d'appartenance des documents composés et des graphiques référencés à partir des listes d'articles) lors de la publication, puis détermine si le contenu est prêt pour la publication. Ce délégué est utilisé pour déterminer si les traductions sont prêtes, mais il peut également s'efforcer de savoir si le document lui-même l'est.
Le paramètre de règle de publication nommé OnContentHolderLinkFailed définit le mode de traitement de la demande de publication à appliquer lorsqu'un document ou sa traduction ne sont pas prêts.
Enregistrement
Enregistrez le délégué CustomContentReadyChecker en ajoutant la commande suivante dans un fichier service.properties.xconf :
<Service name="com.ptc.arbortext.windchill.publisher.
CustomContentReadyChecker">
<Option serviceClass="CustomContentCheckerClassName"
requestor="null" selector="null"/>
</Service>
Interface 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
}
Méthode d'API isTranslatedContentReady()
Renvoie la valeur true si le document est prêt, ou false s'il ne l'est pas.
Cette méthode vérifie l'état du document et de sa traduction, afin de déterminer s'ils sont prêts à être publiés.
Paramètres :
source
Contenu du document.
trans
Contenu traduit du document.
context
Contexte de champ de données, qui inclut des paramètres de règle de publication et d'autres informations relatives à la publication.
Méthode d'API isContentReady()
Renvoie la valeur true si le document est prêt, ou false s'il ne l'est pas.
Cette méthode vérifie l'état du document, afin de déterminer s'il est prêt à être publié.
Paramètres :
source
Contenu du document.
context
Contexte de champ de données, qui inclut des paramètres de règle de publication et d'autres informations relatives à la publication.
Agrégateur d'étiquettes de sécurité
Le délégué SecurityLabelAggregator définit les étiquettes de sécurité d'une représentation publiée, en fonction des données et des étiquettes de sécurité associées qui sont publiées.
Au cours du processus de publication, Windchill Service Information Manager regroupe les étiquettes de sécurité pour chacun des éléments collectés pour le champ de données et applique un attribut d'étiquette de sécurité. Vous pouvez définir la hiérarchie des étiquettes de sécurité pour la collection d'éléments à l'aide de l'interface SecurityLabelAggregator, qui agrège des étiquettes de sécurité en fonction de la logique applicative.
L'interface traite les étiquettes de sécurité pour les éléments suivants :
tous les éléments WTParts de la structure ;
tous les objets WTDocument, EPMDocument, de graphique et de liste d'articles liés ;
tous les fragments liés à partir de documents ;
tous les graphiques liés à partir de listes d'articles et de documents ;
toutes les représentations incluses dans le champ de données.
* 
Les objets référencés sont exclus, à moins que leur contenu ne soit également inclus dans le champ de données (et non simplement leurs métadonnées).
Les étiquettes de sécurité ne sont pas prises en charge pour la publication de paquets.
Enregistrement
Enregistrez le délégué SecurityLabelAggregator en ajoutant la commande suivante dans un fichier service.properties.xconf :
<Service name="com.ptc.arbortext.windchill.publisher.
SecurityLabelAggregator">
<Option serviceClass="CustomSecurityLabelAggregatorClassName"
requestor="null" selector="null"/>
</Service>
Interface 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;
}
Méthode d'API aggregate()
Renvoie une valeur vide.
Cette méthode définit l'étiquette de sécurité finale de la représentation cible, en fonction des étiquettes de sécurité de toutes les données collectées dans un champ de données.
Paramètres :
mergeTo
Collection d'étiquettes de sécurité pour finalTarget. Lorsque la méthode est appelée, il se peut que cette variable contienne déjà des étiquettes de sécurité.
finalTarget
Objet dans lequel les étiquettes de sécurité finales sont stockées.
mergeFrom
Collection d'étiquettes de sécurité pour mergeFromObejct. Ces étiquettes de sécurité facilitent l'identification du mode de définition utilisé pour les étiquettes de sécurité finales.
mergeFromObject
Objet qui contient quelques étiquettes de sécurité.
options
Mappage des paramètres de règle de publication et de leurs valeurs.
Méthode d'API isSecured()
Renvoie true ou false.
La méthode vérifie les étiquettes de sécurité finales agrégées et détermine s'il est nécessaire de sécuriser la représentation publiée. Si la méthode isSecured() renvoie la valeur true, cela signifie que la représentation publiée doit être placée dans un dossier sécurisé. L'archive de transaction sécurisée doit être configurée dans Arbortext Publishing Engine.
Paramètres :
securityLabels
Etiquettes de sécurité finales à appliquer à des fins de sécurité.
options
Mappage des paramètres de règle de publication et de leurs valeurs.
Filtre d'éléments
Le délégué ElementFilter permet à l'utilisateur d'exclure des éléments d'information des champs de données des structures de service. Par exemple, ce délégué peut exclure les éléments d'information associés à certaines étiquettes de sécurité des champs de données.
Une liste d'articles ou un objet de contenu (par exemple EPMDocument) doivent être filtrés si certains de leurs enfants le sont. Dans le cas contraire, vous risquez de publier une liste d'articles ou un document incomplets, ce qui peut entraîner des erreurs.
Enregistrement
Enregistrez le délégué ElementFilter en ajoutant la commande suivante dans un fichier service.properties.xconf :
<Service name="com.ptc.arbortext.windchill.publisher.payload.ElementFilter">
<Option serviceClass="CustomElementFilterClassName"
requestor="null" selector="null"/>
</Service>
Interface 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;
}
Méthode d'API filter()
Renvoie la valeur true pour exclure curElement du champ de données. Renvoie la valeur false pour inclure curElement.
Cette méthode vérifie chaque élément d'information dans la structure de service, afin de déterminer s'il doit être filtré.
Paramètres :
context
Contexte de champ de données, qui inclut des paramètres de règle de publication et d'autres informations.
curElement
Noeud de structure de service, liste d'articles ou illustration de liste d'articles qui peuvent être ajoutés au champ de données.
associated
Collection d'objets persistants associée au paramètre curElement. Par exemple, si curElement est un noeud de structure d'information qui pointe vers un document dynamique, le paramètre associated contient le document dynamique.
Fournisseur de sources de métadonnées personnalisées
Le délégué CustomMetaDataSourceProvider permet à l'utilisateur de fournir des sources de métadonnées supplémentaires pour un élément de liste d'articles ou un noeud quelconque au sein d'une structure de service. Les sources de métadonnées supplémentaires sont ajoutées aux sources existantes, puis sérialisées vers des fichiers XML. En général, l'éditeur collecte les sources de métadonnées de chaque noeud de structure et chaque élément de liste d'articles en fonction des paramètres du fichier publishable_attset.xml. Pour plus d'informations, consultez la section Configuration d'attributs.
Enregistrement
Enregistrez le délégué CustomMetaDataSourceProvider en ajoutant la commande suivante dans un fichier service.properties.xconf :
<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>
Interface 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;
}
Méthode d'API getCustomDataSources()
Renvoie une collection de sources de métadonnées personnalisées qui seront ajoutées aux sources existantes et sérialisées vers le noeud cible.
Cette méthode collecte des métadonnées supplémentaires pour les sources spécifiées.
Paramètres :
targetNode
La valeur correspondante peut être l'une des suivantes :
Noeud consulté dans la structure d'information ou la structure de publication lors de l'appel de la méthode.
Elément wt.part.WTPart lié à partir d'une liste d'articles lors de la sérialisation d'un objet de liste d'articles.
Objet de contenu ajouté au champ de données (comme un document dynamique) lorsque les métadonnées de cet objet sont requises dans le manifeste.
linkToNode
Lien vers l'élément targetNode du noeud parent lors de l'appel de la méthode. La valeur peut être null pour le noeud racine ou pour les noeuds ajoutés à l'arborescence par le délégué ServiceStructureTraversing. Dans un élément de liste d'articles, il s'agit de l'élément PartListItem lié à l'élément wt.part.WTPart. Pour les objets de contenu, il peut s'agir d'un lien spécialisé. Exemple : EPMDescribedByLink.
rootNode
Racine de la structure de service ou d'un objet de liste d'articles.
hookContext
Contexte SISOperationServerContext qui fournit des informations sur le type d'opération en cours d'exécution, ainsi que les filtres appliqués à la structure.
Fourniture de traductions de métadonnées personnalisées
Si vous travaillez avec des métadonnées personnalisées traduites, utilisez la méthode addTranslation() de la classe PropertyValue de RawMetaDataSource. Par exemple :
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);
Résultats de métadonnées pour le français (paquet par défaut) :
<Metadata source="RawSoftType">
<Property name="token2">
<Value xml:lang="en" transidref="...">value12</Value>
<Value xml:lang="en" transidref="...">value12_2</Value>
</Property>
</Metadata>
Résultats de métadonnées dans translation.xml (PDF par défaut) :
<Target xml:lang="fr">
...
<Value transid="07ecb4cfd68fab55">value12_fr</Value>
<Value transid="07ecb4cfd68fse54">value12_2_fr</Value>
...
</Target>
Le délégué peut définir Localizable sur "true", auquel cas les valeurs de propriétés présentent une traduction pouvant apparaître dans un groupe. La méthode addTranslation() peut fournir des traductions personnalisées dans une langue spécifique. Les délégués peuvent posséder plusieurs traductions pour une PropertyValue. Ainsi, quand un groupe est publié pour une langue spécifique, la traduction appropriée (si disponible) apparaît dans le groupe.
Si une propriété est marquée comme localisable mais que le délégué ne fournit aucune traduction pour la langue cible publiée, la publication est mise en échec (si la règle de publication CompleteTranslationCheck est définie sur "true").
Comparaison des métadonnées personnalisées pour les horodatages agrégés
Dans les métadonnées personnalisées, les détails de l'horodatage agrégé sont fournis via l'attribut SIM.lastUpdated pour la liste d'articles et l'attribut SIM.lastUpdatedMetadata pour les documents EPM. Utilisez la méthode getTimeStamp() de la classe AttributeMetaDataSource dans RawMetadasource, dans le délégué CustomMetaDataSourceProvider.
La publication inclura la valeur renvoyée par le paramètre getTimeStamp() pour le document racine, c'est-à-dire les documents dynamiques sous le conteneur, et la liste d'articles, et ignorera le reste du contenu. Par exemple, si les données personnalisées d'un document dynamique enfant contiennent également l'horodatage, la publication n'inclura pas cette information dans l'horodatage calculé pour son parent.
L'horodatage est renvoyé via RawMetadasource et est défini dans la classe AttributeMetaDataSource.
public class AttributeMetaDataSource implements SISMetaDataSource {
private WTReference targetRef;
protected List<Property> properties;
protected List<Object> incrementalList;
protected long timeStamp;
Fournisseur de sources de métadonnées personnalisées du manifeste
Le délégué ManifestCustomMetaDataSourceProvider ajoute et supprime les sources de métadonnées associées au contenu, et ajoute de nouveaux attributs aux métadonnées existantes dans le fichier manifest.xml, au sein du champ de données. Les sources de métadonnées supplémentaires sont ajoutées aux sources existantes, puis sérialisées vers des fichiers XML. Comme exemple de source de métadonnées existante, citons l'effectivité du service. Lors de la sérialisation du contenu de la structure de service (documents dynamiques, listes d'articles) pour le champ de données, les sources de métadonnées sont collectées en fonction des paramètres du fichier manifest_attset.xml. Pour plus d'informations, consultez la section Configuration d'attributs.
Enregistrement
Enregistrez le délégué ManifestCustomMetaDataSourceProvider en ajoutant la commande suivante dans un fichier service.properties.xconf :
<Service name="com.ptc.arbortext.windchill.siscore.operation.
ManifestCustomMetaDataSourceProvider">
<Option cardinality="singleton" serviceClass=
"ManifestCustomMetaDataSourceProviderClassName"
requestor="null" />
</Service>
L'attribut du sélecteur spécifie le contexte. La classe est enregistrée de manière isolée. Vérifiez que l'objet peut être utilisé simultanément dans plusieurs fils.
Interface 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;
}
Méthode d'API getCustomDataSources()
Renvoie un plan des références ciblées et de leurs informations personnalisées de métadonnées.
Paramètres :
currentData
La valeur est un plan des références ciblées et de leurs enfants.
hookContext
Contexte SISOperationServerContext qui fournit des informations sur le type d'opération en cours d'exécution, ainsi que les filtres appliqués à la structure.
Exemple d'ajout de métadonnées
Lancez un objet OperationMetaDataSource.
OperationMetaDataSource om = new OperationMetaDataSource
(OperationMetaDataSource.E_Operation.Add);
WTArrayList list = new WTArrayList();
list.add(PersistableObject);
om.setTargets(list);
Renvoie l'objet OperationMetaDataSource.
Map<WTReference, List<SISMetaDataSource>> ret = new HashMap
<WTReference, List<SISMetaDataSource>>
List<SISMetaDataSource> src = new ArrayList<SISMetaDataSource>()
src.add(om);
ret.put(targetRef, src);
Exemple de suppression de métadonnées
Lancez un objet OperationMetaDataSource.
OperationMetaDataSource om = new OperationMetaDataSource
(OperationMetaDataSource.E_Operation.Remove);
WTArrayList list = new WTArrayList();
list.add(PersistableObject);
om.setTargets(list);
Renvoie l'objet OperationMetaDataSource.
Map<WTReference, List<SISMetaDataSource>>
ret = new HashMap<WTReference,
List<SISMetaDataSource>>List<SISMetaDataSource> src = new
ArrayList<SISMetaDataSource>();
src.add(om);
ret.put(targetRef, src);
Exemple d'ajout d'un attribut aux métadonnées existantes
Lancez un objet AttributeMetaDataSource.
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);
Renvoie l'objet AttributeMetaDataSource.
Map<WTReference, List<SISMetaDataSource>>
ret = new HashMap<WTReference,
List<SISMetaDataSource>>List<SISMetaDataSource> src = new
ArrayList<SISMetaDataSource>();
src.add(am);
ret.put(targetRef, src);
Fourniture de traductions de métadonnées personnalisées
Si vous travaillez avec des métadonnées personnalisées traduites, utilisez la méthode addTranslation() de la classe PropertyValue de RawMetaDataSource. Par exemple :
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);
Résultats de métadonnées pour le français (paquet par défaut) :
<Metadata source="RawSoftType">
<Property name="token2">
<Value xml:lang="en" transidref="...">value12</Value>
<Value xml:lang="en" transidref="...">value12_2</Value>
</Property>
</Metadata>
Résultats de métadonnées dans translation.xml (PDF par défaut) :
<Target xml:lang="fr">
...
<Value transid="07ecb4cfd68fab55">value12_fr</Value>
<Value transid="07ecb4cfd68fse54">value12_2_fr</Value>
...
</Target>
Le délégué peut définir Localizable sur "true", auquel cas les valeurs de propriétés présentent une traduction pouvant apparaître dans un groupe. La méthode addTranslation() peut fournir des traductions personnalisées dans une langue spécifique. Les délégués peuvent posséder plusieurs traductions pour une PropertyValue. Ainsi, quand un groupe est publié pour une langue spécifique, la traduction appropriée (si disponible) apparaît dans le groupe.
Si une propriété est marquée comme localisable mais que le délégué ne fournit aucune traduction pour la langue cible publiée, la publication est mise en échec (si la règle de publication CompleteTranslationCheck est définie sur "true").
Comparaison entre les métadonnées personnalisées du manifeste pour les horodatages agrégés
Dans les métadonnées personnalisées, les détails de l'horodatage agrégé sont fournis via l'attribut SIM.lastUpdated pour la liste d'articles et l'attribut SIM.lastUpdatedMetadata pour les documents EPM. Utilisez la méthode getTimeStamp() de la classe AttributeMetaDataSource dans RawMetadasource, dans le délégué ManifestCustomMetadataSourceProvider.
La publication inclura la valeur renvoyée par le paramètre getTimeStamp() pour le document racine, c'est-à-dire les documents dynamiques sous le conteneur, et la liste d'articles, et ignorera le reste du contenu. Par exemple, si les données personnalisées d'un document dynamique enfant contiennent également l'horodatage, la publication n'inclura pas cette information dans l'horodatage calculé pour son parent.
public class AttributeMetaDataSource implements SISMetaDataSource {
private WTReference targetRef;
protected List<Property> properties;
protected List<Object> incrementalList;
protected long timeStamp;
* 
Les métadonnées renvoyées de ce hook ne sont pas surveillées pour la publication incrémentielle.
Custom Translation Hook
La commande CustomTranslationHook peut récupérer les valeurs traduites pour les attributs Windchill durant la publication. Une valeur renvoyée de null signifie que la traduction n'est pas disponible. La sortie publiée est incluse dans le fichier translation.xml. s attributs spécifiés doivent être intégrés dans le fichier de configuration localizable_attset.xml pour être inclus dans le champ de données.
Enregistrement
Pour enregistrer votre hook personnalisé de traduction, ajoutez une entrée semblable à la suivante dans le fichier sis.service.properties.xconf :
<Service name="com.ptc.arbortext.windchill.siscore.CustomTranslationHook">
<Option serviceClass="YourCustomTranslationHookClassName"
requestor="null" selector="null"/>
</Service>
Interface 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;
}
Méthode d'API translateAttribute()
Cette méthode spécifie l'attribut pour lequel vous souhaitez récupérer une valeur d'attribut traduite.
La valeur renvoyée est une chaîne traduite pour l'attribut spécifié, si une traduction existe. Si la méthode renvoie null ou transmet une exception, aucune traduction n'est disponible ; la chaîne d'attribut source est utilisée.
Paramètres :
softtype
le sous-type Windchill de la structure de service
attributeName
le nom d'attribut du sous-type Windchill
sourceLanguage
la langue source ou créée de la commande attributeValue
attributeValue
la valeur d'attribut pour laquelle une traduction doit être récupérée
targetLanguage
la langue cible pour laquelle une traduction doit être récupérée
Dossier personnalisé dans un champ de données
Le délégué CustomArtifactProvider fournit un hook permettant d'inclure des artefacts personnalisés dans le groupe de champs de données.
Enregistrement
Pour enregistrer le délégué CustomArtifactProvider, ajoutez une entrée semblable à la suivante dans le fichier sis.service.properties.xconf :
<Service name="com.ptc.arbortext.windchill.publisher.payload.CustomArtifactProvider">
<Option serviceClass="YourCustomArtifactProviderImplementation"
requestor="null" selector="null"/>
</Service>
Interface 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();
Méthode d'API initiateCustomFolder()
Cette méthode est transférée au chemin d'un répertoire temporaire vide récemment créé, ainsi que l'objet de contexte du champ de données. Si la valeur renvoyée est VSResult.FAIL, la publication s'arrête et renvoie une erreur.
Paramètres :
tempDir
répertoire temporaire vide
context
objet de contexte du champ de données
La valeur renvoyée est VSResult.SUCCESSFUL ou VSRESULT.FAIL.
Méthode d'API publishCustomFolder()
Cette méthode modifie le contenu du répertoire temporaire. Elle peut, par exemple, effectuer la compression de certains artefacts.
Renvoie VSResult.SUCCESSFUL ou VSRESULT.FAIL. Si la méthode renvoie la valeur VSResult.SUCCESSFUL, le contenu du répertoire est copié dans le dossier personnalisé, dans le champ de données. Si la méthode renvoie la valeur VSRESULT.FAIL, le répertoire temporaire est supprimé de manière définitive, avec son contenu, dans le champ de données.
Méthode permettant de coder le répertoire et les noms de fichier
L'utilitaire encodePayloadFileName a recours à un code de style pourcentage pour coder les caractères spéciaux susceptibles d'apparaître dans le nom de fichier d'un répertoire ou d'artefacts du champ de données ou du groupe de publication. L'utilitaire remplace les caractères spéciaux et non alphanumériques contenus dans les noms de fichier par un trait de soulignement (_), suivi des valeurs hexadécimales (#) des caractères qui sont remplacés.
Les caractères suivants ne seront pas convertis lors du codage :
A-Z (caractères latins en majuscules)
a-z (caractères latins en minuscules)
0–9 (chiffres arabes)
. (point)
~ (tilde)
Signature de méthode pour l'utilitaire :
public static String encodePayloadFileName(String fname)
Signature de méthode entièrement qualifiée pour l'utilitaire :
com.ptc.arbortext.windchill.publisher.payload.util.FileNameUtil.encodePayloadFileName(String fname)
Où l'élément fname correspond au nom du fichier.
Publier des noeuds de hiérarchie de produit inactifs
L'élément CustomPHHook détecte des noeuds de hiérarchie de produit en dehors de l'arborescence de hiérarchie de produit et les publie en tant que noeuds inactifs. Si le noeud fait partie de l'arborescence, il est indiqué comme inactif. S'il ne l'est pas, il est inséré en tant qu'enfant de la hiérarchie de produit racine et indiqué comme inactif.
Enregistrement
Pour enregistrer votre hook personnalisé de hiérarchie de produit, ajoutez une entrée semblable à la suivante dans le fichier sis.service.properties.xconf :
<Service name="com.ptc.arbortext.windchill.publisher.payload.CustomPHHook">
<Option cardinality="singleton" serviceClass="HookPersonnaliséHiérarchieProduits"
requestor="null" selector="null"/>
</Service>
Interface 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);
}
Méthode d'API getInactivePHNodes()
Renvoie une collection d'articles WTPart qui correspondent à des noeuds inactifs dans une hiérarchie de produit. Si la méthode renvoie un noeud qui ne fait pas partie de la hiérarchie de produit ou si l'objet n'est pas un article WTPart, une exception est générée. Si la méthode renvoie un noeud ou un article n'appartenant pas à l'arborescence de la hiérarchie de produit, ce noeud est ajouté en tant que nouvel élément d'information de la hiérarchie de produit dans la structure.
Paramètres :
rootPH
racine de la structure hiérarchique de produit
phNC
Critères de navigation dans la hiérarchie de produit
payloadContext
Contexte
Délégué de post-conversion
L'élément PostConvertDelegate permet à l'utilisateur d'effectuer le post-traitement d'une réponse renvoyée par Arbortext Publishing Engine après une publication. La réponse inclut les informations du fichier composerlog.xml qui contient des erreurs ou des avertissements. Ces informations doivent déclencher une action du processus ou l'envoi d'une notification électronique. Le délégué est appelé, que la publication aboutisse ou échoue.
Si l'élément PostConvertDelegate génère une exception, cette dernière est notée dans le fichier journal de WVS, mais elle ne modifie pas l'état de la publication.
Enregistrement
Enregistrez votre délégué de post-conversion personnalisé en ajoutant le paramètre de publication WVs nommé PostConvertDelegate à une règle de publication et en spécifiant le nom de classe du délégué personnalisé, par exemple :

<worker name="com.ptc.arbortext.wvs/PostConvertDelegate">
com.ptc.arbortext.windchill.publisher.CustomPostConvertDelegate</worker>
Interface 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;
}
Méthode d'API execute()
La valeur renvoyée apparaît dans le Moniteur des tâches WVS.
Cette méthode est appelée immédiatement après l'envoi d'une réponse à la publication par Arbortext Publishing Engine.
Paramètres :
representable
Objet cible qui a été publié.
targetRep
Représentation ciblée dans l'objet visé. Ce paramètre est uniquement destiné à la republication et à la publication incrémentielle. Lorsqu'il est non nul, il contient l'ancienne représentation de l'objet cible. Dans tous les autres cas, la valeur est Null.
parameters
Paramètres de règle de publication utilisés pour cette publication.
responseStreams
Mappage qui inclut l'ensemble des noms de fichier et flux de sortie des fichiers pour la réponse.
publishedList
Collection du contenu inclus dans le champ de données. La valeur peut être Null si la fonction d'audit est désactivée.
Est-ce que cela a été utile ?