java - 如何在 Liferay 文档库中添加具有附加属性的文件

标签 java liferay document-library jcr liferay-6

我正在尝试解决这个问题,我在 Liferay's forum here 中问过这个问题- 最后一个条目。

我唯一能想到的就是创建一个 Expando对于FileEntry,这看起来很复杂。谁知道这是否有意义。我不喜欢 Expando 功能,因为我无法通过 hibernate 正确查询它们。

有人知道我在 Liferay 论坛中的问题的答案吗?

问题是,

DLAppLocalServiceUtil.addFileEntry(...);
DLLocalServiceUtil.addFile(....);

不允许您存储有关文件的任何其他信息/属性。因此,必须直接使用 JackRabbit,而不是使用 Liferay 的 JCRHook。但是您失去了文档库带来的所有优势。

最佳答案

是的,唯一的选择是使用 Expando AKA 自定义属性/字段。对于 fileEntry,您不需要以编程方式创建表和列,但您可以在控制面板 > 自定义字段中进行设置。

之后,您可以选择如何填充扩展值。

fileEntry.getExpandoBridge().setAttribute("propName", "propValue")

或者如果您从 View 层获取属性

<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)

最后,您可能需要查询具有特定属性的 fileEntries

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文档库不是JCR内容存储库,但它实际上是一个文档库,它通过Hooks为具体的repo实现提供抽象层,例如JCRHook(其中存储文件)进入 jackrabbit 存储库)、CMIS 支持、迁移支持等。它还处理权限检查、文件版本控制、文档工作流程和 Assets 管理。

因此,如果您打算做一些更复杂的事情,则必须查询属性/元数据、更改它们并扩展它们。您应该考虑直接使用 JCR 存储库...

关于java - 如何在 Liferay 文档库中添加具有附加属性的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5357131/

相关文章:

liferay - 如何在 Liferay 中添加成功消息和失败消息?

javascript - 如何在 Sharepoint 中获取文件的文件类型

java - 如何获取多用户聊天昵称的 Jabber ID

java - Liferay 服务器无法在 Windows 上启动

jquery - Liferay 6.1 中未使用 SpringMVC portlet 调用 Ajax 方法

powershell - 从站点的所有列表中检索所有项目-Powershell

web-services - 如何使用 SharePoint Web 服务重命名文件?

java - 如何使用 Spring Data JDBC 选择引用的实体

java - 在java客户端中使用@POST请求发送参数

java - 使用 Hibernate Criteria API 查询与投影的多对一关系