我已在Tridion 2011中的持久性类型的存储扩展中为我的二进制文件写了自定义DAO到添加 /更新/删除特定记录。
下面是我尝试在自定义二进制DAO(PublishActionDAO
)中使用自定义DAO类/接口(PublishAction
和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);
}
}
上面是创建新二进制文件时添加的示例代码,同样适用于更新和删除,我将把操作存储为添加,二进制发布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();
答案 0 :(得分:7)
可以通过验证relativePath
方法中create
的扩展名来严格检查类型:
if (!relativePath.toLowerCase().endsWith(".pdf")) { return; }
但是,有一种更好的处理方法 - 在cd_storage_conf.xml
中,使用特定扩展名映射二进制类型。然后,如果扩展名匹配,CD存储框架将仅调用您的DAO:
<Item typeMapping="Binary" itemExtension=".pdf" storageId="myStorage"/>