質問

I am trying to add the unpublished components entry in my custom storage extension. We know that we don't have any base class in Tridion for ComponentUndeploy as we have for deploy "ComponentDeploy", so I am trying to use ComponentPresentationUndeploy class to track the components which are getting and below is sample code how I am trying to track.

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);
        }

    }
}

Any idea why I am not getting any entry for components in my database

Edit: Added sample code from PageUndeploy implementation done by me:

   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

        }
    }
役に立ちましたか?

解決

You can try this as I just taken class name from your input

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);          
    }                           
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top