数据格式说明
DDei
的所有设计数据都以文件为单位保存在一个JSON对象
中。JSON对象
包含了全量的页签
、舞台
、图层
、控件
的位置
以及属性
信息。开发人员可以存储这个JSON到服务端数据库中,从而轻易的实现保存功能;也解析这个JSON,将其转换成自己业务应用想要的格式,使业务应用具备图形化编排和展示的能力,如:Activi/BPM等流程格式。本文档将对JSON格式进行详细说明。
JSON示例
通过DDeiEditor
的files
属性能够获取所有打开文件的文件,通过DDeiFile
的toJSON
方法就能够得到如下JSON。可以结合设计图可以很了解其结构,JSON是从DDeiFile
这一层级开始。
{
"id": "1234567890",
"name": "新建文件_NEW",
"desc": "",
"extData": {},
"state": 2,
"publish": "0",
"lastUpdateTime": 1720510890856,
"path": "/新建文件_NEW",
"currentSheetIndex": 0,
"modelType": "DDeiFile",
"modelNumber": 6,
"unicode": "7c2e23e9a3786cd895d4999084ef6262",
"ddeiVersion": 1237,
"sheets": [
{
"name": "页面-1",
"desc": "页面-1",
"stage": {
"id": "stage_1",
"layers": [
{
"id": "layer_11",
"name": "图层1",
"models": {
"end_17": {
"id": "end_17",
"modelCode": "102090",
"modelType": "DDeiPolygon",
"cpv": {
"x": 175.48749999999998,
"y": 110.159375,
"z": 1
},
"hpv": [
{
"x": 175.48749999999998,
"y": 110.159375,
"z": 1
},
{
"x": 201.94583333333333,
"y": 110.159375,
"z": 1
}
],
"exPvs": {},
"poly": 2,
"mirrorX": false,
"mirrorY": false,
"sptStyle": {},
"fill": {
"color": "black"
},
"bpv": {
"x": 186.07083333333333,
"y": 120.74270833333333,
"z": 1
}
},
"start_19": {
"id": "start_19",
"modelCode": "102001",
"modelType": "DDeiPolygon",
"cpv": {
"x": 175.48749999999998,
"y": 65.18020833333334,
"z": 1
},
"hpv": [
{
"x": 175.48749999999998,
"y": 65.18020833333334,
"z": 1
},
{
"x": 201.94583333333333,
"y": 65.18020833333334,
"z": 1
}
],
"exPvs": {},
"poly": 2,
"mirrorX": false,
"mirrorY": false,
"sptStyle": {},
"bpv": {
"x": 186.07083333333333,
"y": 75.76354166666667,
"z": 1
}
}
},
"midList": [
"end_17",
"start_19"
],
"modelType": "DDeiLayer",
"baseModelType": "DDeiLayer",
"index": 0,
"background": null,
"display": 1,
"lock": false,
"print": true,
"centerOpPoints": [],
"modelCode": "DDeiLayer",
"modelChanged": true,
"modelNumber": 2
},
{
"id": "layer_default",
"name": "图层",
"models": {
"task_6": {
"id": "task_6",
"modelCode": "102010",
"modelType": "DDeiPolygon",
"cpv": {
"x": 92.14375000000001,
"y": 65.70937500000001,
"z": 1
},
"hpv": [
{
"x": 92.14375000000001,
"y": 65.70937500000001,
"z": 1
},
{
"x": 118.60208333333334,
"y": 65.70937500000001,
"z": 1
}
],
"exPvs": {
"_84b25e15bf91626b80631bd0d088255e": {
"x": 92.14375000000001,
"y": 74.96979166666667,
"z": 1,
"rate": 0.5,
"sita": 90,
"index": 0,
"id": "_84b25e15bf91626b80631bd0d088255e"
}
},
"poly": 2,
"mirrorX": false,
"mirrorY": false,
"sptStyle": {},
"text": "A",
"bpv": {
"x": 121.24791666666667,
"y": 84.23020833333334,
"z": 1
}
},
"task_8": {
"id": "task_8",
"modelCode": "102011",
"modelType": "DDeiPolygon",
"cpv": {
"x": 135.53541666666666,
"y": 124.71145833333333,
"z": 1
},
"hpv": [
{
"x": 135.53541666666666,
"y": 124.71145833333333,
"z": 1
},
{
"x": 161.99375,
"y": 124.71145833333333,
"z": 1
}
],
"exPvs": {
"_b9bcf285ebba6247bf5593eaa3f1fdb7": {
"x": 135.53541666666666,
"y": 115.45104166666667,
"z": 1,
"rate": 0.5,
"sita": -90,
"index": 2,
"id": "_b9bcf285ebba6247bf5593eaa3f1fdb7"
}
},
"poly": 2,
"mirrorX": false,
"mirrorY": false,
"sptStyle": {},
"text": "B",
"border": {
"round": 5
},
"bpv": {
"x": 164.63958333333335,
"y": 143.23229166666667,
"z": 1
}
},
"line_10": {
"id": "line_10",
"modelCode": "100401",
"modelType": "DDeiLine",
"hpv": [
{
"x": 92.14375000000001,
"y": 74.96979166666667,
"z": 1
},
{
"x": 118.60208333333334,
"y": 74.96979166666667,
"z": 1
}
],
"pvs": [
{
"x": 92.14375000000001,
"y": 74.96979166666667,
"z": 1,
"isVector3": true
},
{
"x": 92.14375000000001,
"y": 95.21041666666667,
"z": 1
},
{
"x": 135.53541666666666,
"y": 95.21041666666667,
"z": 1
},
{
"x": 135.53541666666666,
"y": 115.45104166666667,
"z": 1,
"isVector3": true
}
],
"exPvs": {},
"mirrorX": false,
"mirrorY": false,
"sptStyle": {},
"type": 2,
"linkModels": {
"lsm_10": {
"type": 3,
"dmid": "lsm_10"
}
},
"freeze": 0
},
"lsm_10": {
"id": "lsm_10",
"modelCode": "100200",
"modelType": "DDeiPolygon",
"cpv": {
"x": 113.83958333333334,
"y": 95.21041666666667,
"z": 1
},
"hpv": [
{
"x": 113.83958333333334,
"y": 95.21041666666667,
"z": 1
},
{
"x": 140.29791666666665,
"y": 95.21041666666667,
"z": 1
}
],
"exPvs": {},
"poly": 2,
"mirrorX": false,
"mirrorY": false,
"sptStyle": {},
"borderType": 0,
"text": "连接",
"font": {
"size": 12
},
"bpv": {
"x": 135.00625,
"y": 101.82499999999999,
"z": 1
}
}
},
"midList": [
"task_6",
"task_8",
"line_10",
"lsm_10"
],
"modelType": "DDeiLayer",
"baseModelType": "DDeiLayer",
"index": 1,
"background": null,
"display": 1,
"lock": true,
"print": true,
"centerOpPoints": [],
"modelCode": "DDeiLayer",
"modelChanged": true,
"modelNumber": 4
}
],
"layerIndex": 0,
"idIdx": 20,
"modelType": "DDeiStage",
"ratio": 1,
"width": 2245.0393700787404,
"height": 1587.4015748031497,
"wpv": {
"x": -658.5196850393702,
"y": -488.20078740157487,
"z": 0
},
"links": [
{
"smid": "task_6",
"dmid": "line_10",
"smpath": "exPvs._84b25e15bf91626b80631bd0d088255e",
"dmpath": "startPoint"
},
{
"smid": "task_8",
"dmid": "line_10",
"smpath": "exPvs._b9bcf285ebba6247bf5593eaa3f1fdb7",
"dmpath": "endPoint"
}
],
"spv": {
"x": 561.2598425196851,
"y": 396.85039370078744,
"z": 1
},
"modelCode": "DDeiStage",
"unit": "mm"
},
"active": 1,
"modelType": "DDeiSheet",
"unicode": "741d8249192061ceb6228a5ba7df035f"
}
]
}
属性说明
第一级DDeiFile
属性名 | 说明 | 数据类型 | 默认值 | 备注 |
---|---|---|---|---|
id | id | string | 文件唯一标识 | |
unicode | 标识码 | string | 唯一标识 | |
name | 名称 | string | 文件名称 | |
path | 路径 | string | 文件路径 | |
desc | 说明 | string | 文件说明 | |
modelNumber | 模型数量 | number | 文件的所有页签的图形数量总和 | |
modelType | 模型类型 | string | DDeiFile | 文件的模型类别 |
state | 状态 | number | 文件状态 | |
publish | 发布状态 | number | 0未发布,1已发布 | |
lastUpdateTime | 最后更新时间 | number | 最后修改文件的时间 | |
extData | 扩展数据 | object | 用于存储一些业务相关的扩展数据 | |
ddeiVersion | DDei版本 | number | 当前文件保存时的DDei版本,用于兼容性检查 | |
currentSheetIndex | 当前页签下标 | number | 0 | 当前哪个页签处于激活状态 |
sheets | 页签 | object[] | 文件所包含的页签集合,至少包含1个页签,参考第二级DDeiSheet |
第二级DDeiSheet
属性名 | 说明 | 数据类型 | 默认值 | 备注 |
---|---|---|---|---|
unicode | 标识码 | string | 页签唯一标识 | |
name | 页签名称 | string | 页签的显示标题名称 | |
desc | 页签说明 | string | 页签的说明备注 | |
modelType | 模型类型 | string | DDeiSheet | 页签的模型类型 |
active | 激活状态 | number | 0 | 1激活/0未激活 |
stage | 舞台 | object | 页签的舞台,一个页签有且只有一个舞台,参考第三级DDeiStage |
第三级DDeiStage
属性名 | 说明 | 数据类型 | 默认值 | 备注 |
---|---|---|---|---|
id | 舞台ID | string | 舞台的唯一标识 | |
unicode | 唯一编号 | string | 系统生成 | 自动编码 |
modelCode | 模型类型 | string | DDeiStage | 舞台的模型类型 |
modelType | 模型类型 | string | DDeiStage | 舞台的模型类型 |
idIdx | 当前图形的ID种子 | number | ||
ratio | 缩放比率 | number | 1.0 | |
width | 画布宽度 | number | ||
height | 画布高度 | number | ||
wpv | 视窗开始点 | object | (0,0,0) | |
spv | 纸张标量开始点 | object | 中心 | |
mark | 水印 | object | 查看详情 | |
paper | 纸张 | object | 查看详情 | |
ruler | 标尺 | object | 查看详情 | |
grid | 网格线 | object | 查看详情 | |
unit | 单位 | string | px | px像素/cm厘米/mm毫米/inch英寸/m米,当前舞台用来表示大小和位置的单位 |
links | 链接集合 | object[] | 记录了舞台中所有连线和图形的链接信息,可以用此对象来判定两个图形的前后连接关系 | |
links[n].smid | 源对象ID | string | 一般为图形的ID | |
links[n].dmid | 目标对象ID | string | 一般为线的ID | |
links[n].smpath | 源对象属性路径 | string | 一般为线的端点之一 | |
links[n].dmpath | 目标对象属性路径 | string | 一般为图形的扩展端点 | |
layerIndex | 当前的图层下标 | number | -1 | |
layers | 图层集合 | object[] | 舞台的所有图层结合,参考第四级DDeiLayer |
第四级DDeiLayers
属性名 | 说明 | 数据类型 | 默认值 | 备注 |
---|---|---|---|---|
id | 图层ID | string | ||
unicode | 唯一编号 | string | 系统生成 | 自动编码 |
name | 名称 | string | 系统生成 | |
models | 控件集合 | object<string,object> | key为控件ID,value为控件对象,参考控件和容器 | |
midList | 控件ID集合 | string[] | 子控件id列表,带排序 | |
index | 下标 | number | 当前layer所在stage的下标 | |
display | 是否显示 | number | 1 | 0不显示/1显示 |
lock | 锁定 | boolean | false | |
打印 | boolean | true | ||
modelNumber | 模型总数量 | object | 0 | |
bg | 背景 | object | 查看详情 | |
modelType | 模型类型 | string | DDeiLayer |
控件和容器
到这一级就能够获取到具体控件的属性了,由于图形控件的属性支持自定义,因此只列举公共的属性。在这一层中有一种特殊情况,当出现组合控件或容器控件时,需要继续通过midList
和models
进行遍历。才能获取更深层次的控件。
属性名 | 说明 | 数据类型 | 默认值 | 备注 |
---|---|---|---|---|
id | 图形ID | string | 画布唯一 | |
unicode | 唯一编号 | string | 系统生成 | 自动编码 |
code | 编码 | string | ||
text | 文本 | string | ||
poly | 坐标策略 | number | 1 | 1直角坐标/2极坐标 |
rotate | 旋转量 | number | 1.0 | 只读 |
cpv | 中心点向量 | object | (0,0,0) | 中心点坐标 |
hpv | 平行拉伸向量 | objec[] | 用于计算旋转/拉伸量 | |
pvs | 点向量 | object[] | 构成图形的所有点 | |
essBounds | 实际大小 | object | 未经旋转、缩放的实际大小 | |
text | 文本 | string | 显示文本 | |
sptStyle | 特殊文本样式 | object[] | ||
zIndex | 图层层次 | number | 影响渲染顺序 | |
state | 背景 | DDeiEnumControlState | DEFAULT | |
stage | 所属舞台 | DDeiStage | ||
layer | 所属图层 | DDeiLayer | ||
pModel | 所属容器 | DDeiContainer | ||
modelCode | 模型的编码 | string | 区分modelType相同,但业务含义不同的模型 | |
modelType | 模型类型 | string | AbstractShape | |
border | 边框 | object | ||
border.type | 边框类型 | number | 0无/1实线 | |
border.color | 边框颜色 | string | ||
border.opacity | 透明度 | number | 0-1之间 | 1 |
border.width | 宽度 | number | >0 | 1 |
border.dash | 线段样式 | Array | >0 | |
border.roung | 圆角 | number | 0-10 | 0 |
fill | 填充 | object | ||
fill.type | 填充类型 | number | 0无/1纯色/2图片 | |
fill.color | 填充颜色 | string | ||
fill.image | 填充图片 | string | ||
fill.opacity | 透明度 | number | 0-1之间 | 1 |
font | 字体 | object | ||
font.family | 字体名称 | string | 系统默认 | |
font.color | 字体颜色 | string | black | |
font.size | 字体大小 | string | 14 | |
textStyle | 文本样式 | object | ||
textStyle.align | 横向对齐 | number | 1左/2中/3右 | 2 |
textStyle.valign | 纵向对齐 | number | 1上/2中/3下 | 2 |
textStyle.feed | 自动换行 | number | 1是/0否 | 1 |
textStyle.scale | 超范围策略 | number | 0隐藏/1省略/2缩小/3扩展 | 0 |
textStyle.lockWidth | 锁定宽度 | number | 0否/1是 | 0 |
textStyle.hollow | 镂空 | number | 0否/1是 | 0 |
textStyle.bold | 加粗 | number | 0否/1是 | 0 |
textStyle.italic | 斜体 | number | 0否/1是 | 0 |
textStyle.underline | 下划线 | number | 0否/1是 | 0 |
textStyle.deleteline | 删除线 | number | 0否/1是 | 0 |
textStyle.bgcolor | 文本背景 | string | ||
textStyle.hspace | 水平间距 | number | 0-10 | 0.5 |
textStyle.vspace | 垂直间距 | number | 0-10 | 0.5 |
mirrorX | 水平镜像 | boolean | false | |
mirrorY | 垂直镜像 | boolean | false |