2

사용자 지정 저장 장치 확장에 게시되지 않은 구성 요소 항목을 추가하려고합니다. 우리는 "ComponentDeploy"배포를 위해 ComponentUndeploy 용 Tridion에 기본 클래스가 없다는 것을 알고 있으므로 ComponentPresentationUndeploy 클래스를 사용하여 구성 요소를 추적하려고합니다. 아래에는 추적하려는 샘플 코드가 있습니다. .Tridion Deployer 확장자를 사용하여 페이지 게시를 취소 할 때 구성 요소 세부 정보가 데이터베이스에 기록되지 않음

package com.tridion.custom.extensions; 

import com.tridion.broker.StorageException; 

import com.tridion.configuration.Configuration; 
import com.tridion.configuration.ConfigurationException; 

import com.tridion.deployer.DeploymentHandler; 
import com.tridion.deployer.ProcessingException; 
import com.tridion.deployer.Processor; 
import com.tridion.deployer.modules.ComponentPresentationUndeploy; 

import com.tridion.storage.ComponentMeta; 
import com.tridion.storage.StorageManagerFactory; 
import com.tridion.storage.StorageTypeMapping; 
import com.tridion.storage.dao.ItemDAO; 
import com.tridion.storage.dao.ItemTypeSelector; 
import com.tridion.storage.dao.PublishAction; 
import com.tridion.storage.dao.PublishActionDAO; 
import com.tridion.storage.mapper.MapperFactory; 
import com.tridion.transport.transportpackage.ComponentPresentationKey; 
import com.tridion.transport.transportpackage.ProcessorInstructions; 
import com.tridion.transport.transportpackage.TransportPackage; 
import com.tridion.util.TCDURI; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

import java.util.Date; 
import java.util.Iterator; 

public class SearchComponentUndeployer extends ComponentPresentationUndeploy { 
    private static Logger log = LoggerFactory 
      .getLogger(SearchComponentUndeployer.class); 

    public SearchComponentUndeployer(Configuration paramConfiguration, 
      Processor paramProcessor) throws ConfigurationException { 
     super(paramConfiguration, paramProcessor); 
    } 

    @SuppressWarnings("rawtypes") 
    public void process(TransportPackage paramTransportPackage) throws ProcessingException 
    { 
     ProcessorInstructions localProcessorInstructions = paramTransportPackage.getProcessorInstructions(); 
     try 
     { 
      Iterator localIterator = localProcessorInstructions.getArguments(); 
      while (localIterator.hasNext()) 
      { 
       Object localObject = localIterator.next(); 
       if (localObject instanceof ComponentPresentationKey) 
       { 

         ComponentPresentationKey localComponentPresentationKey = (ComponentPresentationKey) localObject; 

         long[] arrayOfLong = new long[2]; 
         arrayOfLong[0] = localComponentPresentationKey.getComponentKey().getId().getItemId(); 
         arrayOfLong[1] = localComponentPresentationKey.getTemplateKey().getId().getItemId(); 

         int PubID = localComponentPresentationKey.getComponentKey().getId().getPublicationId(); 
         String tcmID = Integer.toString(localComponentPresentationKey.getComponentKey().getId().getItemId()); 
         log.info("SearchComponentUndeployer -PubID" + PubID); 
         log.info("SearchComponentUndeployer -tcmID" + tcmID); 
         ItemDAO itemDAO = ((ItemDAO) StorageManagerFactory.getDAO(PubID, StorageTypeMapping.COMPONENT_META)); 
         log.info("SearchComponentUndeployer -itemDAO"+ itemDAO.getStorageId()); 
         ComponentMeta compObject = (ComponentMeta) MapperFactory.mapItemMetaInstance(itemDAO.findByPrimaryKey(PubID, localComponentPresentationKey.getComponentKey().getId().getItemId(),ItemTypeSelector.COMPONENT)); 
         log.info("SearchComponentUndeployer -compObject"+ compObject.getTitle()); 
         String formatTCMID = String.format("tcm:%d-%s-64", PubID,tcmID); 
         log.info("SearchComponentUndeployer - formatTCMID -"+ formatTCMID); 
         String strIgnorePubIds = "232,481"; 
         String strPubId = Integer.toString(PubID); 
         Date lastPublishedDate = compObject.getLastPublishDate(); 

         String schemaID = Integer.toString(compObject.getSchemaId()); 
         if (!strIgnorePubIds.contains(strPubId)) 
         { 
          PublishAction publishAction = new PublishAction(); 
          publishAction.setAction("DEL"); 
          publishAction.setTcmUri(formatTCMID); 
          publishAction.setItemType(16); 
          publishAction.setPublicationID(PubID); 
          publishAction.setLastPublishedDate(lastPublishedDate); 
          publishAction.setSchemaID(schemaID); 
          PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");  
          log.debug("SearchComponentUndeployer Going to Store bean -" + publishAction.toString()); 
          publishAction = publishActionDAO.store(publishAction); 
          log.debug("SearchComponentUndeployer Stored bean -" + publishAction); 
         } 
         DeploymentHandler.undeploy(new TCDURI(PubID, 73014444080L, arrayOfLong)); 
       } 
      }   
     } 
     catch (StorageException e) 
     { 
      log.error("Could not undeploy component presentation", e); 
     } 

    } 
} 

내 데이터베이스

편집의 구성 요소에 대한 항목 못하고있는 이유 어떤 생각 : 나에 의해 수행 PageUndeploy 구현에서 추가 샘플 코드 :

Object argument = iterator.next(); 
    if (argument instanceof PageKey) 
    { 
     PageKey pageKey = (PageKey) argument; 
     TCDURI pageMetaURI = new TCDURI(pageKey.getId() .getPublicationId(), 1168231104576L, pageKey.getId().getItemId()); 
     PageMeta pageMeta = this.pageMetaHome.findByPrimaryKey(pageMetaURI.getPublicationId(),(int) pageMetaURI.getItemId()); 
     if (pageMeta == null) 
     { 
      DeploymentHandler.undeploy(pageMetaURI); 
     } 
     else 
     { 

      //Here I need to loop for componentpresentation and get component object 

     } 
    } 
+3

구성 entPresentationUndeploy는 동적 구성 요소 프레젠테이션의 게시를 취소 할 때만 호출됩니다. 페이지에 임베드 된 컴포넌트 프리젠 테이션의 경우 PageUndeploy를 사용하고 "look inside"를 사용하여 컴포넌트가 어디에 있는지 찾아야합니다. –

+0

안녕하세요 Nuno ... 답장을 보내 주셔서 감사합니다. 샘플 코드 PageUndeployer 클래스를 추가했습니다. 그렇다면 올바른 접근 방식인가요? 그렇다면 코드를 공유하여 구성 요소 객체를 얻으십시오. –

답변

5

당신이 시도 할 수 있습니다 방금 입력 한 수업 명을 가져 왔을 때

List<ComponentPresentationMeta> lstCompObjects= pageMeta.getComponentPresentationMetas(); 
if(lstCompObjects != null && !lstCompObjects.isEmpty()) 
{ 
    for(ComponentPresentationMeta compMeta : lstCompObjects) 
    { 
     String compID = Integer.toString(compMeta.getComponentId()); 
     ItemDAO itemDAO = ((ItemDAO) StorageManagerFactory.getDAO(compMeta.getPublicationId(), StorageTypeMapping.COMPONENT_META)); 

     ComponentMeta compObject = (ComponentMeta) MapperFactory.mapItemMetaInstance(itemDAO.findByPrimaryKey(compMeta.getPublicationId(), compMeta.getComponentId(),ItemTypeSelector.COMPONENT)); 

     PublishAction compPublishAction = new PublishAction(); 
     compPublishAction.setAction("DEL"); 
     compPublishAction.setTcmUri(compID);          
     compPublishAction.setItemType(16); 
     compPublishAction.setPublicationID(compMeta.getPublicationId()); 
     compPublishAction.setLastPublishedDate(compObject.getLastPublicationDate()); 
     compPublishAction.setSchemaID(Integer.toString(compObject.getSchemaId()));   
     compPublishAction = publishActionDAO.store(compPublishAction);   
    }       
} 
+0

명확한 대답, [Area 51 Tridion specific 제안] (http://area51.stackexchange.com/proposals/38335/tridion?referrer=gPujQMxthNCNn9xqeeO2NA2). 잠시 시간이 있으면 같은 SO 계정으로 가입하십시오. –