跳转到主要内容

用于管理CMIS后端Documenten API资源的适配器。

项目描述

版本::
1.9.0
源::

https://github.com/open-zaak/cmis-adapter

关键词::

CMIS, Documenten API, VNG, Common Ground

Python版本::

3.7

Run CI Coverage status Code linting black python-versions django-versions pypi-version

Documenten API提供CMIS后端连接器。

Maykin Media B.V.开发,由乌德勒支市政府委托,并得到Súdwest-Fryslân市政府和Open Zaak项目团队的支持。

简介

文档API CMIS适配器允许Django实现轻松连接到兼容CMIS的文档管理系统(DMS)。最值得注意的是,它被Open Zaak用于将DMS作为Documenten API的后端,而不是使用其自己的后端。

功能

支持CMIS 1.0和CMIS 1.1,但不是所有绑定。以下是每个CMIS版本支持的绑定列表。

CMIS 1.0

CMIS 1.1

Web服务绑定

支持

未测试

AtomPub绑定

未测试

未测试

浏览器绑定

不适用

支持

对于支持的绑定,实现了以下功能

  • 从兼容CMIS的DMS中检索和存储文档。

  • 支持文档的读取和写入。

  • 支持文档的检出/检入。

  • 支持自定义数据模型以存储额外的元数据。

测试平台

安装

注意:如果您使用Open Zaak 1.3.1或更高版本,CMIS适配器已包含在内,无需单独安装。

要求

  • Python 3.7或更高版本

  • setuptools 30.3.0或更高版本

  • Django 3.2或更高版本

安装

  1. 在您的Django项目中安装库

$ pip install drc-cmis
  1. 在您的Django settings.py 中的 INSTALLED_APPS 中添加

INSTALLED_APPS = [
    ...
    "drc_cmis",
    ...
]
  1. 创建一个映射文件,以匹配Documenten API属性与DMS模型中的自定义属性。请参阅映射配置

  2. 在您的 settings.py 中添加以下设置以启用它

# Enables the CMIS-backend and the Django admin interface for configuring
# the DMS settings.
CMIS_ENABLED = True

# Absolute path to the mapping of Documenten API attributes to (custom)
# properties in your DMS content model.
CMIS_MAPPER_FILE = /path/to/cmis_mapper.json
  1. 以超级用户身份登录到Django管理,并配置CMIS后端。

映射配置

有两个重要概念

  • 内容模型 - 用于在文件夹和文档上存储(自定义)属性(的)DMS配置。这些属性被称为CMIS属性。

  • CMIS映射器 - 一个包含从Documenten API属性到CMIS属性的转换的JSON文件。

在DMS内容模型中将Documenten API属性映射到(自定义)CMIS属性应非常小心进行。当DMS存储这些属性时,Documenten API依赖于它们的存 在以创建适当的响应。

以下是CMIS映射器的片段

{
  "DOCUMENT_MAP": {
    "titel": "drc:document__titel"
  }
}

DOCUMENT_MAP描述了Documenten API中EnkelvoudigInformatieObject资源的映射。在这个片段中,仅将EnkelvoudigInformatieObject.titel属性映射到自定义CMIS属性drc:document_titel

使用CMIS-适配器通过CMIS进行Documenten API的通信。因此,当通过Documenten API创建文档时,属性将转换为CMIS属性,如下所示(请注意,这是一个简化的请求示例)。

<?xml version="1.0"?>
<soapenv:Envelope xmlmsg:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlmsg:msg="http://docs.oasis-open.org/ns/cmis/messaging/200908/" xmlmsg:core="http://docs.oasis-open.org/ns/cmis/core/200908/">
<soapenv:Header />
<soapenv:Body>
  <msg:createDocument>
    <msg:repositoryId>d6a10501-ef36-41e1-9aae-547154f57838</msg:repositoryId>
    <msg:properties>
      <core:propertyString propertyDefinitionId="drc:document__titel">
      <core:value>example.txt</core:value>
    </msg:properties>
    <msg:folderId>workspace://SpacesStore/7c6c7c86-fd63-4eec-bcf8-ffb59f6f6b90</msg:folderId>
  </msg:createDocument>
</soapenv:Body>
</soapenv:Envelope>

以下展示了映射配置的示例,其中包含了所有可能的Documenten API资源和属性,具体位于test_app/cmis_mapper.json文件中(cmis_mapper.json)。与这些CMIS属性定义相关的DMS内容模型,针对Alfresco(一个开源DMS),位于/alfresco/extension/alfreso-zsdms-model.xml文件中(alfreso-zsdms-model.xml)。映射和模型应该保持一致。

映射

内容模型和CMIS-mapper配置需要保持一致。对于每个对象,API资源、CMIS对象类型、CMIS基类型以及(可配置的)CMIS-mapper对象都将进行描述。

文档

文档本身、其内容和元数据。

Documenten API资源

EnkelvoudigInformatieObject

CMIS对象类型 *

drc:document

CMIS基类型

cmis:document

CMIS-mapper对象

DOCUMENT_MAP

API属性与CMIS属性之间的映射可以在cmis_mapper.json文件中找到。

使用权限

使用权限。这些权限不需要由DMS强制执行,但将存储在DMS外部使用。

Documenten API资源

使用权限

CMIS对象类型 *

drc:gebruiksrechten

CMIS基类型

cmis:document

CMIS-mapper对象

GEBRUIKSRECHTEN_MAP

API属性与CMIS属性之间的映射可以在cmis_mapper.json文件中找到。

ObjectInformatieObject

文档与其他对象(如案件、决定或其它)之间的关系。

Documenten API资源

ObjectInformatieObject

CMIS对象类型 *

drc:oio

CMIS基类型

cmis:document

CMIS-mapper对象

OBJECTINFORMATIEOBJECT_MAP

API属性与CMIS属性之间的映射可以在cmis_mapper.json文件中找到。

案件类型文件夹

包含此案件类型的所有案件,并具有有关案件类型的某些元数据。API属性来自目录APIZaaktype资源。

目录API资源

Zaaktype

CMIS对象类型 *

drc:zaaktypefolder

CMIS基类型

cmis:folder

CMIS-mapper对象

ZAAKTYPE_MAP

API属性与CMIS属性之间的映射可以在cmis_mapper.json文件中找到。

案件文件夹

包含所有与案件相关的文档,并具有有关案件的某些元数据。API属性来自案件APIZaak资源。

案件API资源

Zaak

CMIS对象类型 *

drc:zaakfolder

CMIS基类型

cmis:folder

CMIS-mapper对象

ZAAK_MAP

API属性与CMIS属性之间的映射可以在cmis_mapper.json文件中找到。

* CMIS对象类型: cmis:objectTypeId

DMS内容模型配置

CMIS映射配置必须与DMS中的内容模型相匹配。每个属性,例如上面示例中的drc:document__titel,必须在内容模型中定义。

/alfresco/extension/alfreso-zsdms-model.xml中显示的示例表明了所有属性、类型以及属性是否被索引(可查询)。如果这些属性配置不正确,Documenten API可能无法正确工作。

DMS文件夹结构

Open Zaak在DMS中使用了与案件和文档服务1.2类似的文件夹结构。然而,由于Documenten API的工作方式,存在一些差异。

创建文档

当通过Documenten API创建文档时,文档将放置在临时文件夹中。默认情况下为:

CMIS Root
+-- DRC (cmis:folder)
    +-- [year] (cmis:folder)
        +-- [month] (cmis:folder)
            +-- [day] (cmis:folder)
                +-- [filename] (drc:document)

例如

CMIS Root > DRC > 2020 > 12 > 31 > document.txt

如果没有其它操作,此文档将保持在此处。

创建使用权限

文档可以有使用权限。这些权限将作为单独的文档(gebruiksrechten)存储在名为相关数据的文件夹中。此文件夹始终位于文档本身的同一文件夹中,类型为cmis:folder

使用权限将始终与文档一起移动或复制。

例如

CMIS Root > DRC > 2020 > 12 > 31 > document.txt
CMIS Root > DRC > 2020 > 12 > 31 > Related data > document.txt-gebruiksrechten

将文档与案件关联

将文档与“案件”(通过在“文档API”中创建一个ObjectInformatieObject实例)关联,会导致文档及其(如果存在)使用权限被移动复制到案件文件夹。

CMIS Root
+-- DRC (cmis:folder)
    +-- [zaaktype-folder] (drc:zaaktypefolder)
        +-- [year] (cmis:folder)
            +-- [month] (cmis:folder)
                +-- [day] (cmis:folder)
                    +-- [zaak-folder] (drc:zaakfolder)
                        +-- [filename] (drc:document)
                        +-- Related data (cmis:folder)
                            +-- [filename]-gebruiksrechten (drc:gebruiksrechten)
                            +-- [filename]-oio (drc:oio)

当文档之前未与案件关联(因此它位于临时文件夹中)时,文档会被移动。当文档已经与案件关联时,文档会被复制到新的案件文件夹。

文档与案件的关联通过其路径隐含描述。然而,此外,这种关联还会以单独的文档(oio)形式存储在“相关数据”文件夹中。

例如

CMIS Root > DRC > Melding Openbare Ruimte > 2020 > 12 > 31 > ZAAK-0000001 > document.txt
CMIS Root > DRC > Melding Openbare Ruimte > 2020 > 12 > 31 > ZAAK-0000001 > Related data > document.txt-gebruiksrechten
CMIS Root > DRC > Melding Openbare Ruimte > 2020 > 12 > 31 > ZAAK-0000001 > Related data > document.txt-oio

将文档与决议关联

当文档与决议关联时,存在几种不同的场景

  1. 决议与案件关联,并且…

    1. 文档未与案件关联(因此文档位于临时文件夹中):文档被移动到与决议相关的案件的案件文件夹。

    2. 文档已经与案件关联:文档被复制到新的案件文件夹。

  2. 决议未与案件关联,并且…

    1. 文档未与案件关联:文档保持在临时文件夹中。

    2. 文档与案件关联:文档被复制到临时文件夹。

在所有情况下,文档与决议的关联都以单独的文档(oio)形式存储在“相关数据”文件夹中,相对于新文档存储的位置。

将文档与另一个对象关联

当文档与任何其他对象关联时,文档不会被移动或复制,并保持在临时文件夹中。

删除案件信息对象

当文档与案件关联时,它位于案件文件夹中,并在“相关数据”文件夹中有一个OIO。如果删除关联案件和文档的ZIO,则删除OIO,文档不应保留在案件文件夹中。这可以通过以下方式完成

  1. 如果文档不是副本(即它是原始文档),则应将其移动到默认文件夹。如果有相关的使用权限,也应将其移动。

  2. 如果文档是副本,则应将其删除。相关的使用权限也应删除。

DMS文件夹结构概述

您可以通过管理界面配置CMIS适配器使用的文件夹。一些文件夹是模板化的(用{{ }}表示),这意味着它们的值取决于当前日期或相关的案件。

以下显示了所有默认文件夹和文档的完整概述

案件文件夹路径

存储与案件相关的文档的位置。

默认:/DRC/{{ zaaktype }}/{{ year }}/{{ month }}/{{ day }}/{{ zaak }}

CMIS Root
+-- DRC (cmis:folder)
    +-- [zaaktype-folder] (drc:zaaktypefolder)
        +-- [year] (cmis:folder)
            +-- [month] (cmis:folder)
                +-- [day] (cmis:folder)
                    +-- [zaak-folder] (drc:zaakfolder)
                        +-- [filename] (drc:document)
                        +-- Related data (cmis:folder)
                            +-- [filename]-gebruiksrechten (drc:gebruiksrechten)
                            +-- [filename]-oio (drc:oio)

例如,您可以将其更改为:/DRC/{{ zaaktype }}/{{ zaak }}以完全删除年/月/日文件夹结构。

其他文件夹路径

存储尚未与案件相关联的文档的位置。

默认:/DRC/{{ year }}/{{ month }}/{{ day }}

CMIS Root
+-- DRC (cmis:folder)
    +-- [year] (cmis:folder)
        +-- [month] (cmis:folder)
            +-- [day] (cmis:folder)
                +-- [filename] (drc:document)
                +-- Related data (cmis:folder)
                    +-- [filename]-gebruiksrechten (drc:gebruiksrechten)
                    +-- [filename]-oio (drc:oio)

关于DMS之间差异的说明

SQL查询支持

在Alfresco中不受支持的SQL查询可以在这里找到。此外,例如:SELECT * FROM drc:document WHERE cmis:parentId = '<folder.objectId>'这样的查询似乎不起作用。

在Corsa中似乎不受支持的SQL查询有

  • IN查询

  • IN_FOLDER('<folder objectId>')

  • OR查询

参考文献

许可

版权所有 © Dimpact 2019 - 2020

许可协议:EUPL

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

drc-cmis-1.9.0.tar.gz (102.5 kB 查看哈希值)

上传时间: 源代码

构建分发

drc_cmis-1.9.0-py3-none-any.whl (99.6 kB 查看哈希值)

上传时间: Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面