Liferayのドキュメントライブラリに追加のプロパティを含むファイルを追加する方法
-
27-10-2019 - |
質問
私はこれを理解しようとしています、私はこの質問をしていました Liferay'sフォーラムはこちら - 最後のエントリ。
そして、私が思いつくことができることだけが作成することです 拡張 FileEntryの場合、これは非常に複雑に思われます。それが理にかなっているかどうかは誰が知っていますか。 Hibernateを介して適切にクエリをすることができなかったので、拡張機能は好きではありません。
そのライフレイフォーラムで私の質問に対する答えを知っている人はいますか?
問題はそれです、
DLAppLocalServiceUtil.addFileEntry(...);
DLLocalServiceUtil.addFile(....);
ファイルに関する追加情報 /プロパティを保存することはできません。その結果、LiferayのJCrhookを使用する代わりに、JackRabbitを直接使用する必要があります。しかし、ドキュメントライブラリがもたらすすべての利点を失います。
解決
YEP、唯一のオプションは、拡張、別名カスタムプロパティ/フィールドを使用することです。 FileEntryの場合、プログラムでテーブルや列を作成する必要はありませんが、コントロールパネル>カスタムフィールドでセットアップできます。
その後、いくつかのオプションがあります。
fileEntry.getExpandoBridge().setAttribute("propName", "propValue")
または、ビューレイヤーからプロパティを取得した場合
<liferay-ui:custom-attributes-available className="<%= DLFileEntry.class.getName() %>">
<liferay-ui:custom-attribute-list
className="<%= DLFileEntry.class.getName() %>"
classPK="<%= (fileVersion != null) ? fileVersion.getFileVersionId() : 0 %>"
editable="<%= true %>"
label="<%= true %>"
/>
</liferay-ui:custom-attributes-available>
その後
ServiceContext serviceContext = ServiceContextFactory.getInstance(
DLFileEntry.class.getName(), actionRequest);
ServiceContextはActionRequestのパラメーターによって入力され、電話をかけるだけです
fileEntry.getExpandoBridge().setAttributes(serviceContext)
最後に、特定のプロパティを持つファイルエントリをクエリする必要があるかもしれません
public Hits search() {
Map<String, Serializable> attributes = new HashMap<String, Serializable>();
attributes.put("propertyName", "propertyValue");
SearchContext searchContext = new SearchContext();
searchContext.setAttributes(attributes);
Indexer indexer = IndexerRegistryUtil.getIndexer(FileEntry.class);
return indexer.search(searchContext);
}
もちろん、Liferay Document LibraryはJCRコンテンツリポジトリではないため、このソリューションは少し複雑に思えるかもしれませんが、文字通り、JCRHOOK(ファイルがJackRabbit Repositoryに保存されているフックなどの具体的なレポの実装の抽象化レイヤーを提供するドキュメントライブラリです。 )、CMISサポート、移行サポートなど。また、許可、ファイルバージョン、ドキュメントワークフロー、資産管理を処理します。
したがって、より複雑なことをするつもりで、プロパティ/メタデータを照会する必要がある場合は、それらを変更して拡張する必要があります。 JCRリポジトリを直接使用することを検討する必要があります...