UI 组件

WebdavDocumentLink 是一个 UI 组件,支持用户在桌面 office 应用程序中打开文档。另外,如果文档具有版本,则用户可以看到文档的所有版本。

ui webdav document link

组件有下列功能:

  • 打开文档的最新版本进行阅读或编辑。

  • 以只读模式打开文档的之前版本(参阅 WebDAV 文档版本)。

下面示例中,为表格组件的 生成 列创建了 WebdavDocumentLink 组件:

<groupTable id="contractsTable"
            width="100%"
            dataContainer="contractsDc">
    <columns>
        <column id="number"/>
        <column id="docLink"
                caption="Document"/>
    </columns>
</groupTable>

columnGenerator 处理器创建并返回 WebdavDocumentLink 组件:

@Autowired
protected UiComponents uiComponents;

@Install(to = "contractsTable.docLink", subject = "columnGenerator")
protected Component contractsTableDocLinkColumnGenerator(Contract contract) {
    WebdavDocumentLink link = uiComponents.create(WebdavDocumentLink.class)
            .withWebdavDocument(contract.getDocument()); (1)
    link.setIsShowVersion(false); (2)
    return link;
}
1 withWebdavDocument() 方法接收文档实例作为参数,用于生成链接。
2 使用 setIsShowVersion() 方法可以设置是否显示版本链接。默认情况下,如果文档有版本功能,则会展示版本链接。

WebdavDocumentVersionLink 支持以只读方式在桌面 Office 软件打开特定的文档版本。组件展示特定文档版本的文件名。

ui webdav document version link

UiComponents 工厂创建 WebdavDocumentVersionLink

WebdavDocumentVersionLink webdavDocumentVersionLink =
    uiComponents.create(WebdavDocumentVersionLink.class);
webdavDocumentVersionLink.setWebdavDocumentVersion(documentVersion);

WebdavDocumentUploadField

WebdavDocumentUploadField 用于处理文件。

组件的 XML 名称:webdavDocumentUpload

组件有下列功能:

  • 上传文档创建一个新的文档或者一个新的文档版本。

  • 打开文档阅读或编辑。

  • 下载最新或之前的文档版本。

  • 基于之前的文档创建新的文档版本。

工作模式

组件有下列工作模式:

  • 如果启用了版本功能,WebdavDocumentUploadField 正常展示。

  • 如果未启用版本功能,WebdavDocumentUploadField 不会展示最新文档版本的链接。

声明式创建

如需在界面 XML 中创建 WebdavDocumentUploadField 组件,首先添加 http://jmix.io/schema/webdav/ui 命名空间。然后使用该命名空间中的组件元素,示例:

<window xmlns="http://jmix.io/schema/ui/window"
        xmlns:webdav="http://jmix.io/schema/webdav/ui"
        caption="msg://contractEdit.caption"
        focusComponent="form">
    <layout spacing="true" expand="editActions">
        <form id="form" dataContainer="contractDc">
            <column width="350px">
                <webdav:webdavDocumentUpload id="documentField"
                                             property="document"/>
            </column>
        </form>
    </layout>
</window>

WebdavDocumentUploadField 继承自 SingleFileUploadField,因此也有下列属性:

编程式用法

WebdavDocumentUploadField 的 API 与 FileStorageUploadField 类似。

使用 FileMultiUploadField

下面示例展示如何使用通过 FileMultiUploadField 上传的文件创建 WebDAV 文档:

@Autowired
protected FileMultiUploadField fileMultiUploadFieldVersioned;
@Autowired
protected TemporaryStorage temporaryStorage;
@Autowired
protected WebdavDocumentsManagementService webdavDocumentsManagementService;
@Autowired
protected Notifications notifications;

@Subscribe
protected void onInit(InitEvent event) {
    fileMultiUploadFieldVersioned.addQueueUploadCompleteListener(e -> {
        for (Map.Entry<UUID, String> entry :
                fileMultiUploadFieldVersioned.getUploadsMap().entrySet()) {
            UUID fileId = entry.getKey();
            String fileName = entry.getValue();

            FileRef fileRef = temporaryStorage.putFileIntoStorage(fileId, fileName); (1)

            webdavDocumentsManagementService.createVersioningDocumentByFileRef(fileRef); (2)
        }
        notifications
                .create()
                .withType(Notifications.NotificationType.HUMANIZED)
                .withCaption("Uploaded files: " +
                        fileMultiUploadFieldVersioned.getUploadsMap().values())
                .show();
        fileMultiUploadFieldVersioned.clearUploads();
    });

    fileMultiUploadFieldVersioned.addFileUploadErrorListener(e ->
            notifications
                    .create()
                    .withCaption("File upload error")
                    .withType(Notifications.NotificationType.HUMANIZED)
                    .show());
}
1 文件保存至文件存储。
2 创建并保存 WebdavDocument