2013-04-10 9 views
1

저는 현재 save-event에있는 이벤트 처리기에서 페이지의 최신 개정 날짜와 해당 구성 요소를 사용자 지정 데이터베이스에 저장하고 있습니다.이 작업은 작동하지만, 일부 성능 문제에 직면했습니다. 이 작업을 어떻게하는지에 대한지역화 된 구성 요소를 사용하여 공유 페이지 가져 오기

, 제가 예를 들어 보겠습니다 : 구성 요소가 저장

경우/(변경 한) 업데이트 후, 나는 내 사용자 지정 데이터베이스에이 구성 요소를 사용하여 모든 페이지를 업데이트하고 싶습니다.

기본 청사진 설정 : (200)는 구성 요소를 ((200)에서 고유 구성 요소) 400 번역 구성 요소에 대한 게시 페이지 (500)에서 600 로컬 사이트에 게시 고유 (400)의 구성 요소와 페이지)

그래서 할 수 있습니다에 대한 500 마스터 게시를 포함 우리가 컴포넌트 X를 200 개 가지고 있고,이 컴포넌트가 500 페이지에 포함되어 있고, X가 400 개로 지역화되어 있고 (X (l)라고 부르겠습니다) 600 페이지가 지역화되어 있지 않습니다 (즉 컴포넌트 x (l))

이제 내 질문에 : 내 저장 전날 (종류의 바보 느끼는)

var filter = new UsingItemsFilter(component.Session) 
     { 
      IncludeLocalCopies = true, 
      ItemTypes = new[] { ItemType.Page } 
     }; 

하지만 이것은 단지 내가 다음 일을 그래서 500 에서 페이지에 나에게 참조를 줄 것이다 : NT 핸들러, 내가 사용하여 페이지 X (난)에 포함 된 것을 확인 그의 구성 요소를 확인, 각 페이지에 대해 다음

foreach(var 500page in foundPages) 
foreach(var publication in publications){ 
if(subject.Session.IsExistingObject(
new TcmUri(page.Id.ItemId,page.Id.ItemType,publication.Id.ItemId) 
)) 
{ 
    someListThatWillContainAllChildPagesFrom500.Add(TheAboveTcmUri); 
} 
} 

그리고 : 이 페이지를 고유 그 (그들을 반복에 의해) 아동 출판물의 모든 페이지의 TCM ID를 생성한다 (지금은 약간의 코딩 psuedocodelike를 사용하여 메신저) 이 상태를 내 사용자 지정 데이터베이스에 저장합니다.

그럼, TOM.NET API (CoreServiceClient가 아님)를 사용하여 지역화 된 구성 요소를 사용하는 모든 페이지를 쿼리하는 방법이 있습니까?

게시판의 하위 발행물을 찾는 더 좋은 방법은 없으므로 childPublication의 페이지 만 확인하면됩니까?

브롬 마틴

+0

Tridion 관련 질문. 아직 알지 못했다면 http://tridion.stackexchange.com/에 전용 Tridion Stack Exchange 사이트가 있습니다. 그 팁을 위해 –

+0

Thx를 게시하면 더 빠르고 더 큰 응답을 얻을 수 있습니다. 아프지도 않습니다. – user1978413

답변

0

다음 코드 샘플은 제품과 함께 당신에게 특정 지역/지역화 항목의 공유 항목을 제공해야합니다. BluePrintNodesFilter은 2013 년에 도입되었지만 이전 버전에서는 BluePrintFilter이 비슷한 방식으로 작동합니다.

SystemManager systemManager = session.SystemManager; 
BluePrintNodesFilter filter = new BluePrintNodesFilter(session) 
{ 
    BaseColumns = ListBaseColumns.Id, 
    ForItem = page 
}; 
IEnumerable<BluePrintNode> allNodes = systemManager.GetBluePrintNodes(filter); 
IEnumerable<RepositoryLocalObject> sharedAndLocal = (from node in allNodes 
    where node.Item != null 
    where node.Item.OwningRepository.Id == page.OwningRepository.Id 
    select node.Item).ToArray();