如何在Tridion 2011中使用Custom DAO在我的存储扩展中仅存储PDF类型的二进制文件

Man*_*ngh 0 tridion tridion-content-delivery tridion-2011 tridion-storage-extension

我已经在Tridion 2011中为我的持久性类型的存储扩展中添加 /更新/删除我的二进制文件的特定记录编写了自定义DAO .

下面是我尝试在我的自定义二进制DAO()中使用我的自定义DAO类/接口(PublishActionDAOPublishAction)的示例代码JPABinaryDAOExtension.

public class JPABinaryDAOExtension extends JPABinaryContentDAO implements BinaryContentDAO 
{

    public JPABinaryDAOExtension(String storageId, EntityManagerFactory entityManagerFactory, String storageName) 
    {
        super(storageId, entityManagerFactory, storageName);
    }

    public JPABinaryDAOExtension(String storageId, EntityManagerFactory entityManagerFactory, EntityManager entityManager, String storageName) 
    {
        super(storageId, entityManagerFactory, entityManager, storageName);
    }

    public void create(final BinaryContent binaryContent, final String relativePath) throws StorageException 
    {
        super.create(binaryContent, relativePath);  
        String url = relativePath;
        String tcmURI = Integer.toString(binaryContent.getBinaryId());
        PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
        PublishAction publishAction = new PublishAction();
        publishAction.setAction("Add");
        publishAction.setUrl(url);
        publishAction.setTcmUri(tcmURI);
        publishActionDAO.store(publishAction);
    }
}
Run Code Online (Sandbox Code Playgroud)

上面是创建新二进制文件时Add的示例代码,同样适用于Update和Delete,我将把Action存储为Add,二进制发布URL,它的TCMURI.我可以在上面的代码中轻松获取这些数据.现在我遇到的问题是我只需要存储仅用于二进制文件的PDF类型的记录,以及其他类型的二进制文件(如JPG/Word等)的记录条目.

编辑:以下解决方案将对我有用或为二进制文件制作对象会降低性能.

ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(binaryContent.getPublicationId(),StorageTypeMapping.BINARY_META);
BinaryMeta binarymeta = (BinaryMeta) item.findBinaryByPrimaryKey(binaryContent.getPublicationId(),binaryContent.getBinaryId());
binarymeta.getBinaryType();
Run Code Online (Sandbox Code Playgroud)

Mih*_*riu 7

该类型严格检查可以通过验证的扩展来完成relativePath你的create方法:

    if (!relativePath.toLowerCase().endsWith(".pdf")) { return; }
Run Code Online (Sandbox Code Playgroud)

但是,有一种更好的方法来处理这种情况 - 在您的cd_storage_conf.xml映射中使用特定扩展名的二进制类型.然后,如果扩展名匹配,CD存储框架将仅调用您的DAO:

    <Item typeMapping="Binary" itemExtension=".pdf" storageId="myStorage"/>
Run Code Online (Sandbox Code Playgroud)