Tridion 2011の永続タイプのストレージ拡張で、バイナリの特定のレコードを追加/更新/削除するカスタムDAOを作成しました。
以下は、カスタムバイナリDAO()でカスタムDAOクラス/インターフェイス(PublishActionDAO
および)を使用しようとしているサンプルコードです。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();