2

我正在尝试在我的自定义存储扩展中添加未发布的组件条目。我们知道我们在 Tridion 中没有任何用于 ComponentUndeploy 的基类,因为我们有部署“ComponentDeploy”,所以我正在尝试使用 ComponentPresentationUndeploy 类来跟踪正在获取的组件,下面是我试图跟踪的示例代码.

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

        }
    }
4

1 回答 1

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);          
    }                           
}
于 2013-01-16T18:04:13.843 回答