0

我已經編寫了自定義DAO到添加 /更新/刪除Tridion 2011中我的二進制文件的持久性類型存儲擴展的特定記錄。如何在Tridion 2011中使用自定義DAO在我的存儲擴展中只存儲PDF類型的二進制文件

下面是我想使用我的自定義DAO類/接口(PublishActionDAOPublishAction)在我的自定義二進制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類型存儲記錄,而對於其他類型的二進制文件(如JPG/Word等)則不需要記錄條目。

編輯:下面的解決方案將爲我工作或使對象的二進制文件,它會降低性能。

ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(binaryContent.getPublicationId(),StorageTypeMapping.BINARY_META); 
BinaryMeta binarymeta = (BinaryMeta) item.findBinaryByPrimaryKey(binaryContent.getPublicationId(),binaryContent.getBinaryId()); 
binarymeta.getBinaryType(); 
+0

好的。現在我們到了某個地方(我將刪除以前的評論,因爲它們已經過時)。 –

+0

你**有**性能問題嗎?如果你使用對象緩存(就像你應該這樣做),用findBinaryByPrimaryKey就不會找到更快速的查找二進制文件的方法。 –

+0

@坦率地說,當我的解決方案進入實際發佈的生產環境時,我只是對性能感到好奇,在上面實現的解決方案上面是最好的,或者我可以做更多的變化來獲取二進制數據,還有一點我們有Tridion存儲擴展類的API參考 –

回答

7

嚴格檢查的類型可以通過在create方法驗證relativePath的擴展來完成:

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

然而,有處理這更好的方式 - 在你cd_storage_conf.xml,使用特定擴展名映射二進制類型。那麼如果擴展匹配,CD存儲框架將只調用你的DAO:

<Item typeMapping="Binary" itemExtension=".pdf" storageId="myStorage"/> 
+0

@Mihai ...謝謝我將在明天嘗試相同並相應地更新答案。 –

相關問題