用于管理CMIS后端Documenten API资源的适配器。
项目描述
- 版本::
- 1.9.0
- 源::
- 关键词::
CMIS, Documenten API, VNG, Common Ground
- Python版本::
3.7
为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中检索和存储文档。
支持文档的读取和写入。
支持文档的检出/检入。
支持自定义数据模型以存储额外的元数据。
测试平台
使用CMIS 1.1浏览器绑定测试Alfresco Enterprise 5.2.3(感谢Contezza)
Alfresco CE 6.1.2-ga(用于CI)
安装
注意:如果您使用Open Zaak 1.3.1或更高版本,CMIS适配器已包含在内,无需单独安装。
要求
Python 3.7或更高版本
setuptools 30.3.0或更高版本
Django 3.2或更高版本
安装
在您的Django项目中安装库
$ pip install drc-cmis
在您的Django settings.py 中的 INSTALLED_APPS 中添加
INSTALLED_APPS = [
...
"drc_cmis",
...
]
创建一个映射文件,以匹配Documenten API属性与DMS模型中的自定义属性。请参阅映射配置。
在您的 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
以超级用户身份登录到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属性来自目录API的Zaaktype资源。
目录API资源 |
Zaaktype |
CMIS对象类型 * |
drc:zaaktypefolder |
CMIS基类型 |
cmis:folder |
CMIS-mapper对象 |
ZAAKTYPE_MAP |
API属性与CMIS属性之间的映射可以在cmis_mapper.json文件中找到。
案件文件夹
包含所有与案件相关的文档,并具有有关案件的某些元数据。API属性来自案件API的Zaak资源。
案件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
将文档与决议关联
当文档与决议关联时,存在几种不同的场景
决议与案件关联,并且…
文档未与案件关联(因此文档位于临时文件夹中):文档被移动到与决议相关的案件的案件文件夹。
文档已经与案件关联:文档被复制到新的案件文件夹。
决议未与案件关联,并且…
文档未与案件关联:文档保持在临时文件夹中。
文档与案件关联:文档被复制到临时文件夹。
在所有情况下,文档与决议的关联都以单独的文档(oio)形式存储在“相关数据”文件夹中,相对于新文档存储的位置。
将文档与另一个对象关联
当文档与任何其他对象关联时,文档不会被移动或复制,并保持在临时文件夹中。
删除案件信息对象
当文档与案件关联时,它位于案件文件夹中,并在“相关数据”文件夹中有一个OIO。如果删除关联案件和文档的ZIO,则删除OIO,文档不应保留在案件文件夹中。这可以通过以下方式完成
如果文档不是副本(即它是原始文档),则应将其移动到默认文件夹。如果有相关的使用权限,也应将其移动。
如果文档是副本,则应将其删除。相关的使用权限也应删除。
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
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。