0

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

下面是我试图在我的自定义二进制 DAO ( ) 中使用我的自定义 DAO 类/接口 (PublishActionDAO和) 的示例代码。PublishActionJPABinaryDAOExtension

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

以上是创建新二进制文件时添加的示例代码,更新和删除也是如此,我将 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();
4

1 回答 1

7

可以通过验证方法中的扩展来严格检查relativePath类型create

    if (!relativePath.toLowerCase().endsWith(".pdf")) { return; }

但是,有一种更好的方法来处理这个问题 - 在您的 中cd_storage_conf.xml,使用特定扩展名映射 Binary 类型。然后 CD 存储框架将仅在扩展匹配时调用您的 DAO:

    <Item typeMapping="Binary" itemExtension=".pdf" storageId="myStorage"/>
于 2013-01-11T20:39:35.037 回答