Personalizzazione avanzata della pubblicazione
Punti di estensione per la pubblicazione
Durante il processo di creazione o di elaborazione del payload sono presenti diversi punti in cui è possibile implementare una personalizzazione. È inoltre possibile implementare un delegato post-conversione.
Analisi della struttura ricambi
Questo delegato ServiceStructureTraversing di utilizzo generico consente di modificare le strutture ricambi di output serializzate senza alterare la struttura ricambi di input. Viene generalmente applicato all'analisi, inclusa la traduzione e la pubblicazione.
Registrazione
Registrare il delegato ServiceStructureTraversing aggiungendo quanto indicato di seguito a un file service.properties.xconf.
<Service context="default" name="com.ptc.arbortext.windchill.siscore.
traversal.ServiceStructureTraversing">
<Option serviceClass="YourCustomTraversingClassName"
requestor="wt.part.WTPart" selector="null"/>
</Service>
Interfaccia di 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;
}
Metodo API children()
Restituisce true per utilizzare il valore modificato del parametro children nella fase successiva dell'analisi.
Questo metodo viene richiamato prima di visualizzare ciascun figlio del nodo e supporta le azioni descritte di seguito.
◦ Aggiunta di nodi figlio
◦ Rimozione di nodi figlio
◦ Riorganizzazione di nodi figlio
Parametri
◦ parent
Il nodo della struttura ricambi attualmente visualizzata dal codice di analisi
◦ children
I nodi figlio del parametro parent
Verifica del contenuto personalizzato pronto
Il delegato CustomContentReadyChecker controlla ciascun documento dinamico (inclusi i link membro di documenti composti e immagini referenziati da elenchi parti) durante la pubblicazione e determina se il contenuto è pronto per la pubblicazione. È possibile utilizzare questo delegato per determinare se le traduzioni sono pronte, ma è in grado di determinare anche se il documento è pronto.
Il parametro della regola di pubblicazione OnContentHolderLinkFailed definisce la modalità di gestione della richiesta di pubblicazione quando un documento o la relativa traduzione non è pronta.
Registrazione
Registrare il delegato CustomContentReadyChecker aggiungendo quanto indicato di seguito a un file service.properties.xconf.
<Service name="com.ptc.arbortext.windchill.publisher.
CustomContentReadyChecker">
<Option serviceClass="CustomContentCheckerClassName"
requestor="null" selector="null"/>
</Service>
Interfaccia di 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
}
Metodo API isTranslatedContentReady()
Restituisce true se il documento è pronto o false se non lo è.
Questo metodo verifica lo stato del ciclo di vita del documento e della relativa traduzione per determinare se sono pronti per la pubblicazione.
Parametri
◦ source
Il contenuto del documento
◦ trans
◦ Il contenuto tradotto del documento
◦ context
Il contesto del payload, che include i parametri delle regole di pubblicazione e altre informazioni di pubblicazione
Metodo API isContentReady()
Restituisce true se il documento è pronto o false se non lo è.
Questo metodo verifica lo stato del ciclo di vita del documento per determinare se è pronto per la pubblicazione.
Parametri
◦ source
Il contenuto del documento
◦ context
Il contesto del payload, che include i parametri delle regole di pubblicazione e altre informazioni di pubblicazione
Interfaccia di aggregazione delle etichette di sicurezza
Il delegato SecurityLabelAggregator consente di impostare le etichette di sicurezza per una rappresentazione pubblicata in base ai dati e alle relative etichette di sicurezza pubblicate.
Durante il processo di pubblicazione, Service Information Manager raccoglie le etichette di sicurezza per ciascuno degli elementi raccolti per il payload e applica un attributo dell'etichetta di sicurezza. È possibile definire la gerarchia delle etichette di sicurezza per la raccolta di elementi mediante l'interfaccia SecurityLabelAggregator che consente di aggregare le etichette di sicurezza in base alla logica aziendale.
L'interfaccia elabora le etichette di sicurezza per gli elementi riportati di seguito.
• tutti gli oggetti WTParts nella struttura
• tutti gli oggetti WTDocument, EPMDocument, immagine ed elenco parti collegati
• tutti i frammenti collegati dai documenti
• tutte le immagini collegate dagli elenchi parti e documenti
• tutte le rappresentazioni incluse nel payload
|
Gli oggetti di riferimento vengono esclusi a meno che anche il relativo contenuto non venga incluso nel payload (non solo i relativi metadati).
Le etichette di sicurezza non sono supportate per la pubblicazione del bundle.
|
Registrazione
Registrare il delegato SecurityLabelAggregator aggiungendo quanto indicato di seguito a un file service.properties.xconf.
<Service name="com.ptc.arbortext.windchill.publisher.
SecurityLabelAggregator">
<Option serviceClass="CustomSecurityLabelAggregatorClassName"
requestor="null" selector="null"/>
</Service>
Interfaccia di 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;
}
Metodo API aggregate()
Restituisce un valore nullo.
Questo metodo consente di impostare l'etichetta di sicurezza finale della rappresentazione di destinazione in base alle etichette di sicurezza di tutti i dati raccolti in un payload.
Parametri
◦ mergeTo
Una raccolta di etichette di sicurezza per finalTarget. Quando il metodo viene richiamato, è possibile che questa variabile contenga già alcune etichette di sicurezza.
◦ finalTarget
L'oggetto in cui vengono memorizzate le etichette di sicurezza finali.
◦ mergeFrom
Una raccolta di etichette di sicurezza per mergeFromObejct. Queste etichette di sicurezza consentono di determinare la modalità di impostazione delle etichette di sicurezza finali.
◦ mergeFromObject
Un oggetto che contiene alcune etichette di sicurezza
◦ options
Una mappa dei parametri delle regole di pubblicazione e dei relativi valori
Metodo API isSecured()
Restituisce true o false.
Il metodo verifica le etichette di sicurezza finali aggregate e determina se proteggere la rappresentazione pubblicata. Se isSecured() restituisce true, la rappresentazione pubblicata deve essere posizionata in una cartella protetta. L'archivio di transazione protetto deve essere configurato nel Arbortext Publishing Engine.
Parametri
◦ securityLabels
Le etichette di sicurezza finali da applicare per assicurare la protezione
◦ options
Una mappa dei parametri delle regole di pubblicazione e dei relativi valori
Filtro elementi
Il delegato ElementFilter consente all'utente di escludere gli elementi informativi dai payload della struttura ricambi. Ad esempio, questo delegato può escludere dai payload gli elementi informativi con determinate etichette di sicurezza.
Un oggetto di contenuto (ad esempio EPMDocument) o un elenco parti deve essere filtrato se uno dei relativi figli è filtrato; in caso contrario, si rischia di generare degli errori dalla pubblicazione di un elenco parti o di un documento incompleto.
Registrazione
Registrare il delegato ElementFilter aggiungendo quanto indicato di seguito a un file service.properties.xconf.
<Service name="com.ptc.arbortext.windchill.publisher.payload.ElementFilter">
<Option serviceClass="CustomElementFilterClassName"
requestor="null" selector="null"/>
</Service>
Interfaccia di 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;
}
Metodo API filter()
Restituisce true per escludere curElement dal payload. Restituisce false per includere curElement.
Questo metodo verifica ciascun elemento informativo nella struttura ricambi per determinare se deve essere filtrato.
Parametri
◦ context
Il contesto del payload, che include i parametri delle regole di pubblicazione e altre informazioni.
◦ curElement
Un nodo della struttura ricambi, un elenco parti o un'illustrazione dell'elenco parti che è possibile aggiungere al payload.
◦ associated
Una raccolta di oggetti persistenti associata a curElement. Ad esempio, se curElement è un nodo della struttura informazioni che punta a un documento dinamico, il parametro associated contiene il documento dinamico.
Provider di origine dei metadati personalizzati
Il delegato
CustomMetaDataSourceProvider consente all'utente di fornire origini di metadati aggiuntive per tutti gli elementi dell'elenco parti o i nodi di una struttura ricambi. Le origini di metadati supplementari vengono aggiunte alle origini di metadati esistenti, quindi serializzate nei file XML. In genere, le origini di metadati vengono raccolte da ciascun nodo della struttura e da ciascun elemento dell'elenco parti in base alle impostazioni nel file
publishable_attset.xml. Per ulteriori informazioni, vedere
Configurazione degli attributi.
Registrazione
Registrare il delegato CustomMetaDataSourceProvider aggiungendo quanto indicato di seguito a un file 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>
Interfaccia di 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;
}
Metodo API getCustomDataSources()
Restituisce una raccolta di origini di metadati personalizzate che vengono aggiunte alle origini di metadati esistenti e serializzate nel nodo di destinazione.
Questo metodo consente di raccogliere metadati aggiuntivi per origini specifiche.
Parametri
◦ targetNode
Il valore può essere uno di quelli riportati di seguito.
▪ Il nodo visualizzato nella struttura informazioni o nella struttura di pubblicazione nel momento in cui viene richiamato il metodo
▪ Il wt.part.WTPart collegato da un elenco parti quando un oggetto dell'elenco parti viene serializzato
▪ Un oggetto di contenuto aggiunto al payload, ad esempio un documento dinamico, quando i metadati dell'oggetto sono richiesti nel manifest
◦ linkToNode
Il link al targetNode dal nodo padre nel momento in cui viene richiamato il metodo. Può essere null per il nodo radice o per i nodi aggiunti alla struttura dal delegato ServiceStructureTraversing. In un elemento dell'elenco parti, è il PartListItem collegato a wt.part.WTPart. Per gli oggetti di contenuto, può essere un link specializzato, ad esempio EPMDescribedByLink.
◦ rootNode
La radice della struttura ricambi o un oggetto dell'elenco parti.
◦ hookContext
Un contesto SISOperationServerContext che fornisce informazioni sul tipo di operazione eseguita e sui filtri applicati alla struttura.
Specifica delle traduzioni per i metadati personalizzati
Se si utilizzano metadati personalizzati tradotti, specificare il metodo addTranslation() della classe PropertyValue di RawMetaDataSource. Esempio:
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);
Metadati restituiti per il francese (default di bundle):
<Metadata source="RawSoftType">
<Property name="token2">
<Value xml:lang="en" transidref="...">value12</Value>
<Value xml:lang="en" transidref="...">value12_2</Value>
</Property>
</Metadata>
Metadati restituiti in translation.xml (default PDF):
<Target xml:lang="fr">
...
<Value transid="07ecb4cfd68fab55">value12_fr</Value>
<Value transid="07ecb4cfd68fse54">value12_2_fr</Value>
...
</Target>
Il delegato può impostare Localizable su "true", in modo da includere una traduzione per i valori delle proprietà da visualizzare nel bundle. Il metodo addTranslation() consente di specificare traduzioni personalizzate per una determinata lingua. I delegati possono presentare più traduzioni per un PropertyValue. Quando il bundle viene pubblicato per una lingua specifica, viene presentata la traduzione appropriata (se disponibile).
Se una proprietà è contrassegnata come localizzabile ma il delegato non fornisce una traduzione per la lingua di destinazione di pubblicazione, l'operazione di pubblicazione non riesce (se la regola di pubblicazione CompleteTranslationCheck è impostata su "true").
Confronto di metadati personalizzati per date e ore aggregate
Nei metadati personalizzati i dettagli di data e ora aggregate vengono forniti tramite l'attributo SIM.lastUpdated per l'elenco parti e l'attributo SIM.lastUpdatedMetadata per i documenti EPM. Utilizzare il metodo getTimeStamp() dalla classe AttributeMetaDataSource in RawMetadasource nel delegato CustomMetaDataSourceProvider.
La pubblicazione include il valore restituito da getTimeStamp() per il contenuto radice, ovvero i documenti dinamici nel contenitore di dati, e l'elenco parti, mentre ignora il resto del contenuto. Ad esempio, se i dati personalizzati del documento dinamico figlio contengono anche data e ora, la pubblicazione non include questa informazione nella data e nell'ora calcolate del rispettivo elemento padre.
La data e l'ora vengono restituite tramite RawMetadasource e sono definite nella classe AttributeMetaDataSource.
public class AttributeMetaDataSource implements SISMetaDataSource {
private WTReference targetRef;
protected List<Property> properties;
protected List<Object> incrementalList;
protected long timeStamp;
Manifest del provider di origine dei metadati personalizzati
Il delegato
ManifestCustomMetaDataSourceProvider aggiunge e rimuove le origini di metadati del contenuto, nonché aggiunge nuovi attributi ai metadati esistenti nel file
manifest.xml nel payload. Le origini di metadati supplementari vengono aggiunte alle origini di metadati esistenti, quindi serializzate nei file XML. Una tipica origine di metadati esistente è l'effettività del servizio. Durante la serializzazione del contenuto della struttura ricambi (ad esempio, documenti dinamici ed elenchi parti) per il payload, le origini di metadati vengono raccolte in base alle impostazioni in
manifest_attset.xml. Per ulteriori informazioni, vedere
Configurazione degli attributi.
Registrazione
Registrare il delegato ManifestCustomMetaDataSourceProvider aggiungendo quanto indicato di seguito a un file service.properties.xconf.
<Service name="com.ptc.arbortext.windchill.siscore.operation.
ManifestCustomMetaDataSourceProvider">
<Option cardinality="singleton" serviceClass=
"ManifestCustomMetaDataSourceProviderClassName"
requestor="null" />
</Service>
L'attributo del selettore specifica il contesto. La classe viene registrata come istanza singola. Assicurarsi che l'oggetto possa essere riutilizzato in più thread simultaneamente.
Interfaccia di 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;
}
Metodo API getCustomDataSources()
Restituisce una mappa dei riferimenti di destinazione e delle relative informazioni sui metadati personalizzati.
Parametri
◦ currentData
Il valore è una mappa dei riferimenti di destinazione e dei relativi figli.
◦ hookContext
Un contesto SISOperationServerContext che fornisce informazioni sul tipo di operazione eseguita e sui filtri applicati alla struttura.
Esempio di aggiunta di metadati
Inizializzare un oggetto OperationMetaDataSource.
OperationMetaDataSource om = new OperationMetaDataSource
(OperationMetaDataSource.E_Operation.Add);
WTArrayList list = new WTArrayList();
list.add(PersistableObject);
om.setTargets(list);
Restituire l'oggetto OperationMetaDataSource.
Map<WTReference, List<SISMetaDataSource>> ret = new HashMap
<WTReference, List<SISMetaDataSource>>
List<SISMetaDataSource> src = new ArrayList<SISMetaDataSource>()
src.add(om);
ret.put(targetRef, src);
Esempio di rimozione di metadati
Inizializzare un oggetto OperationMetaDataSource.
OperationMetaDataSource om = new OperationMetaDataSource
(OperationMetaDataSource.E_Operation.Remove);
WTArrayList list = new WTArrayList();
list.add(PersistableObject);
om.setTargets(list);
Restituire l'oggetto OperationMetaDataSource.
Map<WTReference, List<SISMetaDataSource>>
ret = new HashMap<WTReference,
List<SISMetaDataSource>>List<SISMetaDataSource> src = new
ArrayList<SISMetaDataSource>();
src.add(om);
ret.put(targetRef, src);
Esempio di aggiunta di un attributo ai metadati esistenti
Inizializzare un oggetto 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);
Restituire l'oggetto AttributeMetaDataSource.
Map<WTReference, List<SISMetaDataSource>>
ret = new HashMap<WTReference,
List<SISMetaDataSource>>List<SISMetaDataSource> src = new
ArrayList<SISMetaDataSource>();
src.add(am);
ret.put(targetRef, src);
Specifica delle traduzioni per i metadati personalizzati
Se si utilizzano metadati personalizzati tradotti, specificare il metodo addTranslation() della classe PropertyValue di RawMetaDataSource. Esempio:
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);
Metadati restituiti per il francese (default di bundle):
<Metadata source="RawSoftType">
<Property name="token2">
<Value xml:lang="en" transidref="...">value12</Value>
<Value xml:lang="en" transidref="...">value12_2</Value>
</Property>
</Metadata>
Metadati restituiti in translation.xml (default PDF):
<Target xml:lang="fr">
...
<Value transid="07ecb4cfd68fab55">value12_fr</Value>
<Value transid="07ecb4cfd68fse54">value12_2_fr</Value>
...
</Target>
Il delegato può impostare Localizable su "true", in modo da includere una traduzione per i valori delle proprietà da visualizzare nel bundle. Il metodo addTranslation() consente di specificare traduzioni personalizzate per una determinata lingua. I delegati possono presentare più traduzioni per un PropertyValue. Quando il bundle viene pubblicato per una lingua specifica, viene presentata la traduzione appropriata (se disponibile).
Se una proprietà è contrassegnata come localizzabile ma il delegato non fornisce una traduzione per la lingua di destinazione di pubblicazione, l'operazione di pubblicazione non riesce (se la regola di pubblicazione CompleteTranslationCheck è impostata su "true").
Confronto di metadati personalizzati manifest per date e ore aggregate
Nei metadati personalizzati i dettagli di data e ora aggregate vengono forniti tramite l'attributo SIM.lastUpdated per l'elenco parti e l'attributo SIM.lastUpdatedMetadata per i documenti EPM. Utilizzare il metodo getTimeStamp() dalla classe AttributeMetaDataSource in RawMetadasource nel delegato ManifestCustomMetadataSourceProvider.
La pubblicazione include il valore restituito da getTimeStamp() per il contenuto radice, ovvero i documenti dinamici nel contenitore di dati, e l'elenco parti, mentre ignora il resto del contenuto. Ad esempio, se i dati personalizzati del documento dinamico figlio contengono anche data e ora, la pubblicazione non include questa informazione nella data e nell'ora calcolate del rispettivo elemento padre.
public class AttributeMetaDataSource implements SISMetaDataSource {
private WTReference targetRef;
protected List<Property> properties;
protected List<Object> incrementalList;
protected long timeStamp;
|
I metadati restituiti da questo hook non sono monitorati per la pubblicazione incrementale.
|
Hook di traduzione personalizzato
Il CustomTranslationHook può recuperare i valori tradotti per gli attributi Windchill durante la pubblicazione. Il valore restituito null significa che non è disponibile una traduzione. L'output pubblicato viene incluso in translation.xml. Gli attributi specificati devono essere inclusi nel file di configurazione localizable_attset.xml da inserire nel payload.
Registrazione
Registrare il delegato dell'hook di traduzione personalizzato aggiungendo una voce nel file sis.service.properties.xconf secondo quanto riportato di seguito.
<Service name="com.ptc.arbortext.windchill.siscore.CustomTranslationHook">
<Option serviceClass="YourCustomTranslationHookClassName"
requestor="null" selector="null"/>
</Service>
Interfaccia di 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;
}
Metodo API translateAttribute()
Questo metodo specifica l'attributo per il quale si desidera recuperare un valore di attributo tradotto.
Il valore restituito è una stringa tradotta per l'attributo specificato se esiste una traduzione. Se il metodo restituisce null o genera un'eccezione, significa che non è disponibile una traduzione e che quindi viene utilizzata la stringa dell'attributo d'origine.
Parametri
◦ softtype
Il sottotipo Windchill della struttura ricambi
◦ attributeName
Il nome attributo del sottotipo Windchill
◦ sourceLanguage
La lingua di origine o di creazione di attributeValue
◦ attributeValue
Il valore di attributo per il quale deve essere recuperata una traduzione
◦ targetLanguage
La lingua di destinazione per la quale deve essere recuperata una traduzione
Cartella personalizzata nel payload
Il delegato CustomArtifactProvider fornisce un hook per includere gli elementi personalizzati nel bundle del payload.
Registrazione
Registrare il delegato CustomArtifactProvider aggiungendo una voce come quella riportata di seguito al file sis.service.properties.xconf.
<Service name="com.ptc.arbortext.windchill.publisher.payload.CustomArtifactProvider">
<Option serviceClass="YourCustomArtifactProviderImplementation"
requestor="null" selector="null"/>
</Service>
Interfaccia di 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();
Metodo API initiateCustomFolder()
A questo metodo vengono trasmessi il percorso di una directory temporanea vuota appena creata, nonché l'oggetto di contesto del payload. Se restituisce VSResult.FAIL, la pubblicazione viene interrotta e viene visualizzato un errore.
Parametri
◦ tempDir
directory temporanea vuota
◦ context
oggetto contesto payload
Restituisce VSResult.SUCCESSFUL o VSRESULT.FAIL.
Metodo API publishCustomFolder()
Questo metodo modifica il contenuto della directory temporanea, ad esempio comprimendo alcuni elementi.
Restituisce VSResult.SUCCESSFUL o VSRESULT.FAIL. Se il metodo restituisce VSResult.SUCCESSFUL, il contenuto della directory viene copiato nella cartella personalizzata del payload. Se il metodo restituisce VSRESULT.FAIL, la directory temporanea viene eliminata definitivamente dal payload con il relativo contenuto.
Metodo per codificare i nomi di directory e di file
L'utilità encodePayloadFileName utilizza una codifica basata sulla percentuale per codificare i caratteri speciali eventualmente presenti nel nome file di una directory o negli elementi del payload o del bundle di pubblicazione. L'utilità sostituisce i caratteri speciali e i caratteri non alfanumerici contenuti nei nomi file con un carattere di sottolineatura (_) seguito dai valori esadecimali (#) dei caratteri sostituti.
I caratteri riportati di seguito non vengono sostituiti con un carattere di escape durante la codifica.
• A-Z (caratteri latini maiuscoli)
• a-z (caratteri latini minuscoli)
• 0–9 (numeri arabi)
• . (punto)
• ~ (tilde)
Firma del metodo per l'utilità:
public static String encodePayloadFileName(String fname)
Firma del metodo completa per l'utilità:
com.ptc.arbortext.windchill.publisher.payload.util.FileNameUtil.encodePayloadFileName(String fname)
Dove fname è il nome del file.
Pubblicazione dei nodi inattivi della gerarchia di prodotti
CustomPHHook rileva i nodi della gerarchia di prodotti esterni alla struttura della gerarchia e li pubblica come nodi inattivi. Se il nodo fa parte della struttura, viene contrassegnato come inattivo. In caso contrario, viene inserito come figlio della gerarchia di prodotti radice e contrassegnato come inattivo.
Registrazione
Registrare il delegato dell'hook della gerarchia di prodotti personalizzati aggiungendo una voce come quella riportata di seguito al file sis.service.properties.xconf.
<Service name="com.ptc.arbortext.windchill.publisher.payload.CustomPHHook">
<Option cardinality="singleton" serviceClass="YourCustomPHHook"
requestor="null" selector="null"/>
</Service>
Interfaccia di 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);
}
Metodo API getInactivePHNodes()
Restituisce una raccolta di WTPart che rappresentano nodi inattivi in una gerarchia di prodotti. Se il metodo restituisce un nodo che non fa parte della gerarchia di prodotti o se l'oggetto non è una WTPart, viene generata un'eccezione. Se il metodo restituisce un nodo o una parte esterna alla struttura della gerarchia di prodotti, il nodo viene aggiunto come nuovo elemento informativo della gerarchia di prodotti nella struttura.
Parametri
◦ rootPH
Radice della struttura della gerarchia di prodotti
◦ phNC
Criteri di navigazione all'interno della gerarchia di prodotti
◦ payloadContext
Contesto
Delegato post-conversione
Il delegato PostConvertDelegate consente all'utente di eseguire la post-elaborazione di una risposta restituita da Arbortext Publishing Engine in seguito a un'operazione di pubblicazione. La risposta include le informazioni nel file composerlog.xml, che contiene errori o avvertenze. Queste informazioni devono avviare un'azione del workflow o una notifica e-mail. Il delegato viene richiamato sia in caso di esito positivo dell'operazione di pubblicazione che in caso di esito negativo.
Se PostConvertDelegate genera un'eccezione, l'eccezione viene riportata nel log di Windchill Visualization Services, ma non modifica lo stato dell'operazione di pubblicazione.
Registrazione
Registrare il delegato personalizzato di post-conversione aggiungendo il parametro di pubblicazione PostConvertDelegate di Windchill Visualization Services a una regola di pubblicazione e specificando il nome della classe del delegato personalizzato, ad esempio:
<worker name="com.ptc.arbortext.wvs/PostConvertDelegate">
com.ptc.arbortext.windchill.publisher.CustomPostConvertDelegate</worker>
Interfaccia di 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;
}
Metodo API execute()
Il valore restituito viene visualizzato nel monitor operazioni di Windchill Visualization Services.
Questo metodo viene richiamato subito dopo la restituzione della risposta dell'operazione di pubblicazione da Arbortext Publishing Engine.
Parametri
◦ representable
L'oggetto di destinazione che è stato pubblicato
◦ targetRep
La rappresentazione di destinazione nell'oggetto di destinazione. Questo parametro viene utilizzato solo per la ripubblicazione e la pubblicazione incrementale. Se non è nullo, contiene la rappresentazione precedente dell'oggetto di destinazione. Tutti gli altri casi sono nulli.
◦ parameters
I parametri delle regole di pubblicazione utilizzati per questa operazione di pubblicazione
◦ responseStreams
Una mappa che include tutti i nomi di file e i flussi di output dei file per la risposta
◦ publishedList
Una raccolta del contenuto incluso nel payload. Può essere nullo se la verifica è disattivata.