추가 기능 > 서비스 정보 관리 > Customizing Windchill Service Information Manager and Windchill Service Parts(Windchill Service Information Manager 및 Windchill Service Parts 사용자 정의) > 게시 사용자 정의 > 게시의 고급 사용자 정의
  
게시의 고급 사용자 정의
게시의 확장 포인트
페이로드 작성 또는 처리 중 사용자 정의를 구현할 수 있는 여러 포인트가 있습니다. 사후 변환 위임을 구현할 수도 있습니다.
서비스 구조 통과
이 일반 사용 ServiceStructureTraversing 위임은 입력 서비스 구조에 영향을 주지 않고 시리얼화 중인 출력 서비스 구조를 수정합니다. 이 위임은 일반적으로 번역 및 게시 등의 통과에 적용됩니다.
등록
다음을 service.properties.xconf 파일에 추가하여 ServiceStructureTraversing 위임을 등록합니다.
<Service context="default" name="com.ptc.arbortext.windchill.siscore.
traversal.ServiceStructureTraversing">
<Option serviceClass="YourCustomTraversingClassName
requestor="wt.part.WTPart" selector="null"/>
</Service>
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;
}
children() API 메소드
다음 통과 단계에서 children 매개변수의 수정된 값을 사용하려면 true를 반환합니다.
이 메소드는 각 노드의 하위 노드를 방문하기 전에 호출됩니다. 이 메소드는 다음을 지원합니다.
하위 노드 추가
하위 노드 제거
하위 노드 다시 정렬
매개변수:
parent
통과 코드가 현재 방문 중인 서비스 구조 노드
children
parent 매개변수의 하위 노드
사용자 정의 컨텐트 준비성 검사기
CustomContentReadyChecker 위임은 게시 중 각 동적 문서(복합 문서의 멤버 링크 및 부품 목록에서 참조된 그래픽 포함)를 검사하여 컨텐트가 게시 준비가 되었는지 확인합니다. 이 위임은 번역이 준비되었는지 여부를 확인하는 데 사용되지만 문서 자체의 준비성도 확인할 수 있습니다.
게시 규칙 매개변수 OnContentHolderLinkFailed는 문서 또는 해당 번역이 준비되지 않은 경우 게시 요청을 처리하는 방법을 정의합니다.
등록
다음을 service.properties.xconf 파일에 추가하여 CustomContentReadyChecker 위임을 등록합니다.
<Service name="com.ptc.arbortext.windchill.publisher.
CustomContentReadyChecker">
<Option serviceClass="CustomContentCheckerClassName"
requestor="null" selector="null"/>
</Service>
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
}
isTranslatedContentReady() API 메소드
문서가 준비된 경우 true, 준비되지 않은 경우 false를 반환합니다.
이 메소드는 문서 및 해당 번역의 상태를 확인하여 게시할 준비가 되었는지 결정합니다.
매개변수:
source
문서의 컨텐트
trans
문서의 번역된 컨텐트
context
페이로드 컨텐트(게시 규칙 매개변수 및 기타 게시 정보 포함)
isContentReady() API 메소드
문서가 준비된 경우 true, 준비되지 않은 경우 false를 반환합니다.
이 메소드는 문서의 상태를 확인하여 게시할 준비가 되었는지 결정합니다.
매개변수:
source
문서의 컨텐트
context
페이로드 컨텐트(게시 규칙 매개변수 및 기타 게시 정보 포함)
보안 레이블 집계
SecurityLabelAggregator 위임은 게시 중인 데이터 및 해당 보안 레이블을 기준으로 게시된 표현의 보안 레이블을 설정합니다.
게시 프로세스 중에 Windchill Service Information Manager는 페이로드에 대해 수집 중인 각 요소의 보안 레이블을 수집하고 보안 레이블 속성을 적용합니다. 비즈니스 로직에 따라 보안 레이블을 집계하는 SecurityLabelAggregator 인터페이스를 사용하여 요소 컬렉션에 대한 보안 레이블 계층을 정의할 수 있습니다.
이 인터페이스는 다음 항목에 대한 보안 레이블을 처리합니다.
구조의 모든 WTParts
모든 연결된 WTDocument, EPMDocument, 그래픽 및 부품 목록 객체
문서에서 연결된 모든 조각
부품 목록 및 문서에서 연결된 모든 그래픽
페이로드에 포함된 모든 표현
* 
컨텐트가 메타데이터뿐 아니라 페이로드에도 포함되지 않은 경우 참조된 객체는 제외됩니다.
번들 게시에서는 보안 레이블이 지원되지 않습니다.
등록
다음을 service.properties.xconf 파일에 추가하여 SecurityLabelAggregator 위임을 등록합니다.
<Service name="com.ptc.arbortext.windchill.publisher.
SecurityLabelAggregator">
<Option serviceClass="CustomSecurityLabelAggregatorClassName"
requestor="null" selector="null"/>
</Service>
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;
}
aggregate() API 메소드
보이드를 반환합니다.
이 메소드는 페이로드에서 수집된 모든 데이터의 보안 레이블을 기준으로 대상 표현의 최종 보안 레이블을 설정합니다.
매개변수:
mergeTo
finalTarget에 대한 보안 레이블 컬렉션입니다. 메소드가 호출될 때 이 변수에 이미 일부 보안 레이블이 포함될 수 있습니다.
finalTarget
최종 보안 레이블이 저장되는 객체입니다.
mergeFrom
mergeFromObejct에 대한 보안 레이블 컬렉션입니다. 이러한 보안 레이블을 사용하여 최종 보안 레이블의 설정 방법을 결정할 수 있습니다.
mergeFromObject
일부 보안 레이블을 포함하는 객체
options
게시 규칙 매개변수 및 해당 값의 맵
isSecured() API 메소드
true 또는 false를 반환합니다.
이 메소드는 집계된 최종 보안 레이블을 확인하여 게시된 표현을 보호할지 여부를 결정합니다. isSecured()에서 true를 반환한 경우 게시된 표현을 보안 폴더에 저장해야 합니다. Arbortext Publishing Engine에서 보안 트랜잭션 아카이브를 구성해야 합니다.
매개변수
securityLabels
보안을 위해 적용할 최종 보안 레이블
options
게시 규칙 매개변수 및 해당 값의 맵
요소 필터
ElementFilter 위임을 사용하면 사용자가 서비스 구조 페이로드에서 정보 요소를 제외할 수 있습니다. 예를 들어 이 위임은 페이로드에서 특정 보안 레이블이 있는 정보 요소를 제외할 수 있습니다.
컨텐트 객체(예: EPMDocument) 또는 부품 목록의 경우 해당 하위 항목 중 필터링된 항목이 있거나 불완전한 문서 또는 부품 목록을 게시하여 오류가 발생할 위험이 있으면 필터링해야 합니다.
등록
다음을 service.properties.xconf 파일에 추가하여 ElementFilter 위임을 등록합니다.
<Service name="com.ptc.arbortext.windchill.publisher.payload.ElementFilter">
<Option serviceClass="CustomElementFilterClassName"
requestor="null" selector="null"/>
</Service>
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;
}
filter() API 메소드
페이로드에서 curElement를 제외하려면 true를 반환합니다. curElement를 포함하려면 false를 반환합니다.
이 메소드는 서비스 구조에서 각 정보 요소를 확인하여 필터링해야 할지 여부를 결정합니다.
매개변수:
context
페이로드 컨텐트(게시 규칙 매개변수 및 기타 정보 포함)
curElement
페이로드에 추가할 수 있는 서비스 구조 노드, 부품 목록 또는 부품 목록 일러스트레이션
associated
curElement와 연관된 지속 객체 컬렉션. 예를 들어 curElement가 동적 문서를 가리키는 정보 구조 노드인 경우 associated 매개변수에는 동적 문서가 포함됩니다.
사용자 정의 메타데이터 소스 공급자
CustomMetaDataSourceProvider 위임을 사용하면 사용자가 부품 목록 항목 또는 서비스 구조의 노드에 대한 추가 메타데이터 소스를 제공할 수 있습니다. 추가 메타데이터 소스는 기존 메타데이터 소스에 추가된 다음 XML 파일로 시리얼화됩니다. 일반적으로 publishable_attset.xml 파일의 설정에 따라 각 구조 노드 및 각 부품 목록 항목에서 메타데이터 소스가 수집됩니다. 자세한 내용은 속성 구성을 참조하십시오.
등록
다음을 service.properties.xconf 파일에 추가하여 CustomMetaDataSourceProvider 위임을 등록합니다.
<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>
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;
}
getCustomDataSources() API 메소드
기존 메타데이터 소스에 추가되어 대상 노드로 시리얼화되는 사용자 정의 메타데이터 소스의 컬렉션을 반환합니다.
이 메소드는 지정한 소스에 대한 추가 메타데이터를 수집합니다.
매개변수:
targetNode
값은 다음 중 하나일 수 있습니다.
메소드가 호출될 때 정보 구조 또는 게시 구조에서 방문 중인 노드
부품 목록 객체가 시리얼화될 때 부품 목록에서 연결된 wt.part.WTPart
매니페스트에 객체의 메타데이터가 필요할 때 동적 문서 등 페이로드에 추가 중인 컨텐트 객체
linkToNode
메소드가 호출될 때 상위 노드로부터의 targetNode 연결 루트 노드 또는 ServiceStructureTraversing 위임에 의해 트리에 추가된 노드의 경우 null일 수 있습니다. 부품 목록 항목에서는 PartListItem에 연결된 wt.part.WTPart입니다. 컨텐트 객체의 경우 EPMDescribedByLink 등의 특수화된 링크일 수 있습니다.
rootNode
서비스 구조 또는 부품 목록 객체의 루트
hookContext
수행 중인 작업 유형 및 구조에 적용된 필터에 대한 정보를 제공하는 SISOperationServerContext 컨텍스트
사용자 정의 메타데이터 번역 제공
번역된 사용자 정의 메타데이터로 작업하는 경우 RawMetaDataSourcePropertyValue 클래스에 있는 addTranslation() 메소드를 사용합니다. 예:
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);
프랑스어에 대한 메타데이터 결과(번들 기본값):
<Metadata source="RawSoftType">
<Property name="token2">
<Value xml:lang="en" transidref="...">value12</Value>
<Value xml:lang="en" transidref="...">value12_2</Value>
</Property>
</Metadata>
translation.xml의 메타데이터 결과((PDF 기본값):
<Target xml:lang="fr">
...
<Value transid="07ecb4cfd68fab55">value12_fr</Value>
<Value transid="07ecb4cfd68fse54">value12_2_fr</Value>
...
</Target>
위임의 Localizable을 "true"로 설정할 수 있습니다. 즉, 등록 정보 값에는 번들에 나타날 수 있는 번역이 포함됩니다. addTranslation() 메소드는 특정 언어에 대한 사용자 정의 번역을 제공할 수 있습니다. 위임은 PropertyValue 하나에 대해 여러 번역을 포함할 수 있습니다. 번들이 특정 언어에 대해 게시된 경우 번들에 적절한 번역(제공된 경우)이 나타납니다.
등록 정보가 현지화 가능으로 표시되어 있지만 위임이 게시 대상 언어에 대한 번역을 제공하지 않을 경우 게시 작업이 실패합니다(CompleteTranslationCheck 게시 규칙이 "true"로 설정된 경우).
집계된 타임스탬프에 대한 사용자 정의 메타데이터 비교
사용자 정의 메타데이터에서 집계된 타임스탬프의 세부내용은 부품 목록의 경우 SIM.lastUpdated 속성을 통해, EPM 문서의 경우 SIM.lastUpdatedMetadata 속성을 통해 제공됩니다. CustomMetaDataSourceProvider 위임의 RawMetadasource에 있는 AttributeMetaDataSource 클래스에서 getTimeStamp() 메소드를 사용합니다.
게시에는 루트 컨텐트(컨텐트 홀더에 있는 동적 문서) 및 PartList의 getTimeStamp()에 의해 반환된 값이 포함되며, 나머지 컨텐트는 무시됩니다. 예를 들어, 하위 동적 문서의 사용자 정의 데이터에 타임스탬프가 포함된 경우에도 게시는 상위 동적 문서의 계산된 타임스탬프에 이 정보 부분을 포함하지 않습니다.
타임스탬프는 RawMetadasource를 통해 반환되고 AttributeMetaDataSource 클래스에 정의됩니다.
public class AttributeMetaDataSource implements SISMetaDataSource {
private WTReference targetRef;
protected List<Property> properties;
protected List<Object> incrementalList;
protected long timeStamp;
목록 사용자 정의 메타데이터 소스 공급자
ManifestCustomMetaDataSourceProvider 대리인은 페이로드의 manifest.xml 파일에서 기존 메타데이터에 새 속성을 추가할 뿐 아니라 컨텐트의 메타데이터 소스를 추가하고 제거합니다. 추가 메타데이터 소스는 기존 메타데이터 소스에 추가된 다음 XML 파일로 시리얼화됩니다. 일반적인 기존 메타데이터 소스는 서비스 유효성입니다. 페이로드를 위해 서비스 구조 컨텐트(예: 동적 문서, 부품 목록)를 시리얼화할 때 manifest_attset.xml의 설정에 따라 메타데이터 소스가 수집됩니다. 자세한 내용은 속성 구성을 참조하십시오.
등록
다음을 service.properties.xconf 파일에 추가하여 ManifestCustomMetaDataSourceProvider 위임을 등록합니다.
<Service name="com.ptc.arbortext.windchill.siscore.operation.
ManifestCustomMetaDataSourceProvider">
<Option cardinality="singleton" serviceClass=
"ManifestCustomMetaDataSourceProviderClassName"
requestor="null" />
</Service>
선택자 속성이 컨텍스트를 지정합니다. 클래스가 단일로 등록됩니다. 동시에 여러 스레드에서 객체를 재사용할 수 있어야 합니다.
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;
}
getCustomDataSources() API 메소드
대상 참조 및 해당 사용자 정의 메타데이터 정보 맵을 반환합니다.
매개변수:
currentData
값은 대상 참조 및 해당 하위 항목 맵입니다.
hookContext
수행 중인 작업 유형 및 구조에 적용된 필터에 대한 정보를 제공하는 SISOperationServerContext 컨텍스트
메타데이터 추가의 예
OperationMetaDataSource 객체를 초기화합니다.
OperationMetaDataSource om = new OperationMetaDataSource
(OperationMetaDataSource.E_Operation.Add);
WTArrayList list = new WTArrayList();
list.add(PersistableObject);
om.setTargets(list);
OperationMetaDataSource 객체를 반환합니다.
Map<WTReference, List<SISMetaDataSource>> ret = new HashMap
<WTReference, List<SISMetaDataSource>>
List<SISMetaDataSource> src = new ArrayList<SISMetaDataSource>()
src.add(om);
ret.put(targetRef, src);
메타데이터 제거의 예
OperationMetaDataSource 객체를 초기화합니다.
OperationMetaDataSource om = new OperationMetaDataSource
(OperationMetaDataSource.E_Operation.Remove);
WTArrayList list = new WTArrayList();
list.add(PersistableObject);
om.setTargets(list);
OperationMetaDataSource 객체를 반환합니다.
Map<WTReference, List<SISMetaDataSource>>
ret = new HashMap<WTReference,
List<SISMetaDataSource>>List<SISMetaDataSource> src = new
ArrayList<SISMetaDataSource>();
src.add(om);
ret.put(targetRef, src);
기존 메타데이터에 속성 추가의 예
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);
AttributeMetaDataSource 객체를 반환합니다.
Map<WTReference, List<SISMetaDataSource>>
ret = new HashMap<WTReference,
List<SISMetaDataSource>>List<SISMetaDataSource> src = new
ArrayList<SISMetaDataSource>();
src.add(am);
ret.put(targetRef, src);
사용자 정의 메타데이터 번역 제공
번역된 사용자 정의 메타데이터로 작업하는 경우 RawMetaDataSourcePropertyValue 클래스에 있는 addTranslation() 메소드를 사용합니다. 예:
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);
프랑스어에 대한 메타데이터 결과(번들 기본값):
<Metadata source="RawSoftType">
<Property name="token2">
<Value xml:lang="en" transidref="...">value12</Value>
<Value xml:lang="en" transidref="...">value12_2</Value>
</Property>
</Metadata>
translation.xml의 메타데이터 결과((PDF 기본값):
<Target xml:lang="fr">
...
<Value transid="07ecb4cfd68fab55">value12_fr</Value>
<Value transid="07ecb4cfd68fse54">value12_2_fr</Value>
...
</Target>
위임의 Localizable을 "true"로 설정할 수 있습니다. 즉, 등록 정보 값에는 번들에 나타날 수 있는 번역이 포함됩니다. addTranslation() 메소드는 특정 언어에 대한 사용자 정의 번역을 제공할 수 있습니다. 위임은 PropertyValue 하나에 대해 여러 번역을 포함할 수 있습니다. 번들이 특정 언어에 대해 게시된 경우 번들에 적절한 번역(제공된 경우)이 나타납니다.
등록 정보가 현지화 가능으로 표시되어 있지만 위임이 게시 대상 언어에 대한 번역을 제공하지 않을 경우 게시 작업이 실패합니다(CompleteTranslationCheck 게시 규칙이 "true"로 설정된 경우).
집계된 타임스탬프에 대한 매니페스트 사용자 정의 메타데이터 비교
사용자 정의 메타데이터에서 집계된 타임스탬프의 세부내용은 부품 목록의 경우 SIM.lastUpdated 속성을 통해, EPM 문서의 경우 SIM.lastUpdatedMetadata 속성을 통해 제공됩니다. ManifestCustomMetadataSourceProvider 위임의 RawMetadasource에 있는 AttributeMetaDataSource 클래스에서 getTimeStamp() 메소드를 사용합니다.
게시에는 루트 컨텐트(컨텐트 홀더에 있는 동적 문서) 및 PartList의 getTimeStamp()에 의해 반환된 값이 포함되며, 나머지 컨텐트는 무시됩니다. 예를 들어, 하위 동적 문서의 사용자 정의 데이터에 타임스탬프가 포함된 경우에도 게시는 상위 동적 문서의 계산된 타임스탬프에 이 정보 부분을 포함하지 않습니다.
public class AttributeMetaDataSource implements SISMetaDataSource {
private WTReference targetRef;
protected List<Property> properties;
protected List<Object> incrementalList;
protected long timeStamp;
* 
이 후크에서 반환된 메타데이터의 증분 게시는 모니터링되지 않습니다.
사용자 정의 번역 후크
CustomTranslationHook는 게시 중 Windchill 속성의 번역된 값을 읽어들일 수 있습니다. null 반환 값은 번역이 없다는 의미입니다. 게시된 출력은 translation.xml에 포함됩니다. 지정한 속성이 페이로드에 포함되려면 localizable_attset.xml 구성 파일에 포함되어야 합니다.
등록
sis.service.properties.xconf 파일에 다음과 같은 엔트리를 추가하면 사용자 정의 번역 후크 위임이 등록됩니다.
<Service name="com.ptc.arbortext.windchill.siscore.CustomTranslationHook">
<Option serviceClass="YourCustomTranslationHookClassName"
requestor="null" selector="null"/>
</Service>
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;
}
translateAttribute() API 메소드
이 메소드는 번역된 속성 값을 읽어들이려는 속성을 지정합니다.
반환되는 값은 지정된 속성의 번역된 문자열(번역이 있는 경우)입니다. 이 메소드가 null을 반환하거나 예외를 발생시킬 경우 번역이 없는 것이며 소스 속성 문자열이 사용됩니다.
매개변수:
softtype
서비스 구조의 Windchill 하위 유형
attributeName
Windchill 하위 유형 속성 이름
sourceLanguage
attributeValue의 소스 또는 작성 언어
attributeValue
번역을 읽어들여야 하는 속성 값
targetLanguage
번역을 읽어들여야 하는 대상 언어
페이로드의 사용자 정의 폴더
CustomArtifactProvider 위임에서는 페이로드 번들에 사용자 정의 아티팩트를 포함할 후크를 제공합니다.
등록
sis.service.properties.xconf 파일에 다음과 같은 엔트리를 추가하여 CustomArtifactProvider 위임을 등록합니다.
<Service name="com.ptc.arbortext.windchill.publisher.payload.CustomArtifactProvider">
<Option serviceClass="YourCustomArtifactProvider구현"
requestor="null" selector="null"/>
</Service>
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();
initiateCustomFolder() API 메소드
이 메소드는 새로 생성된 빈 임시 디렉토리 및 페이로드 컨텍스트 객체의 경로에 전달됩니다. VSResult.FAIL을 반환하는 경우 게시 작업이 중지되고 오류가 반환됩니다.
매개변수:
tempDir
빈 임시 디렉토리
context
페이로드 컨텍스트 객체
VSResult.SUCCESSFUL 또는 VSRESULT.FAIL 반환
publishCustomFolder() API 메소드
이 메소드는 임시 디렉토리의 컨텐트를 수정합니다. 예를 들어, 일부 아티팩트를 압축합니다.
VSResult.SUCCESSFUL 또는 VSRESULT.FAIL를 반환합니다. 메소드가 VSResult.SUCCESSFUL을 반환하는 경우 디렉토리의 컨텐트가 페이로드의 사용자 정의 폴더에 복사됩니다. 메소드가 VSRESULT.FAIL을 반환하는 경우 임시 디렉토리가 컨텐트와 함께 페이로드에서 영구히 삭제됩니다.
디렉토리 및 파일 이름 인코딩 방법
encodePayloadFileName 유틸리티는 퍼센트 스타일 인코딩을 사용하여 페이로드 또는 게시 번들에서 디렉토리 또는 아티팩트의 파일 이름에 포함된 특수 문자를 인코딩합니다. 이 유틸리티는 파일 이름에 포함된 특수 문자 및 영숫자가 아닌 문자를 밑줄(_) 문자로 대체하고 그 뒤에 대체할 문자의 16진수(#) 값을 표시합니다.
다음 문자는 인코딩 중에 이스케이프되지 않습니다.
A-Z(대문자 라틴 문자)
a-z(소문자 라틴 문자)
0–9(아랍어 숫자)
.(마침표)
~(틸드)
유틸리티에 대한 메소드 서명:
public static String encodePayloadFileName(String fname)
유틸리티에 대한 전체 메소드 서명:
com.ptc.arbortext.windchill.publisher.payload.util.FileNameUtil.encodePayloadFileName(String fname)
여기서 fname은 파일 이름입니다.
비활성 제품 계층 구조 노드 게시
CustomPHHook는 제품 계층 구조 트리 밖에 있는 제품 계층 구조 노드를 검사하여 비활성 노드로 게시합니다. 노드가 트리의 일부인 경우 비활성으로 표시됩니다. 노드가 트리의 일부가 아닌 경우 루트 PH의 하위 항목으로 삽입되고 비활성으로 표시됩니다.
등록
sis.service.properties.xconf 파일에 다음과 같은 엔트리를 추가하여 사용자 정의 제품 계층 구조 후크 위임을 등록합니다.
<Service name="com.ptc.arbortext.windchill.publisher.payload.CustomPHHook">
<Option cardinality="singleton" serviceClass="YourCustomPHHook"
requestor="null" selector="null"/>
</Service>
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);
}
getInactivePHNodes() API 메소드
제품 계층 구조에서 비활성 노드인 WTParts 컬렉션을 반환합니다. 메소드에서 제품 계층 구조의 일부가 아니거나 객체가 WTPart가 아닌 노드를 반환하는 경우 예외가 발생합니다. 메소드에서 제품 계층 구조 트리 밖에 있는 노드 또는 부품을 반환하는 경우 노드는 구조에 새 제품 계층 구조 정보 요소로 추가됩니다.
매개변수:
rootPH
제품 계층 구조의 루트
phNC
제품 계층 구조 탐색 조건
payloadContext
컨텍스트
사후 변환 위임
PostConvertDelegate를 사용하면 게시 작업 후 사용자가 Arbortext Publishing Engine에서 반환된 응답을 사후 처리할 수 있습니다. 응답에는 오류 또는 경고가 포함된 composerlog.xml 파일의 정보가 포함됩니다. 이 정보는 워크플로 작업 또는 이메일 공지를 트리거해야 합니다. 위임은 게시 작업의 성공 여부에 관계없이 호출됩니다.
PostConvertDelegate에서 예외가 발생하면 이 예외가 WVS 로그에 기록되지만 예외로 인해 게시 작업의 상태가 변경되지는 않습니다.
등록
WVS PostConvertDelegate 게시 매개변수를 게시 규칙에 추가하고 사용자 정의 위임의 클래스 이름을 지정하여 사용자 정의 사후 변환 위임을 등록합니다. 예를 들면 다음과 같습니다.

<worker name="com.ptc.arbortext.wvs/PostConvertDelegate">
com.ptc.arbortext.windchill.publisher.CustomPostConvertDelegate</worker>
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;
}
execute() API 메소드
반환된 값이 WVS 작업 모니터에 표시됩니다.
이 메소드는 게시 작업 응답이 Arbortext Publishing Engine에서 반환된 직후 호출됩니다.
매개변수:
representable
게시된 대상 객체
targetRep
대상 객체의 대상 표현. 이 매개변수는 재게시 및 증분 게시 전용입니다. 이 값이 null이 아니면 대상 객체의 이전 표현이 포함됩니다. 다른 모든 경우에는 null입니다.
parameters
이 게시 작업에 사용된 게시 규칙 매개변수
responseStreams
응답에 대한 모든 파일 이름 및 파일 출력 스트림을 포함하는 맵
publishedList
페이로드에 포함된 컨텐트의 컬렉션. 감사가 비활성화된 경우 null일 수 있습니다.