Как хранить только двоичные файлы типа PDF в моем расширении хранилища, используя Custom DAO в Tridion 2011
Я написал пользовательский DAO для добавления/ обновления / удаления определенных записей для моих двоичных файлов в моем расширении постоянного хранения в Tridion 2011.
Ниже приведен пример кода, где я пытаюсь использовать свой собственный класс / интерфейс DAO (PublishActionDAO
а также PublishAction
) в моем собственном бинарном DAO (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-файлов типа Binaries и для других типов двоичных файлов, таких как (JPG/Word и т. Д.) Без записей.
Изменить: ниже решение будет работать для меня или создание объекта для двоичных файлов, это снизит производительность.
ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(binaryContent.getPublicationId(),StorageTypeMapping.BINARY_META);
BinaryMeta binarymeta = (BinaryMeta) item.findBinaryByPrimaryKey(binaryContent.getPublicationId(),binaryContent.getBinaryId());
binarymeta.getBinaryType();
1 ответ
Строго проверять тип можно путем проверки расширения relativePath
в вашем create
метод:
if (!relativePath.toLowerCase().endsWith(".pdf")) { return; }
Тем не менее, есть лучший способ справиться с этим - в вашем cd_storage_conf.xml
сопоставьте двоичный тип с использованием определенного расширения. Тогда среда хранения CD будет вызывать ваш DAO, только если расширение соответствует:
<Item typeMapping="Binary" itemExtension=".pdf" storageId="myStorage"/>