0

Tridion 2011の永続タイプのストレージ拡張で、バイナリの特定のレコードを追加/更新/削除するカスタムDAOを作成しました。

以下は、カスタムバイナリ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);
    }
}

上記は、新しいバイナリが作成されたときの追加のサンプルコードであり、更新と削除についても同じです。アクションを追加、バイナリ公開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 に答える