数据更新

1.  接口描述

电子实验记录本的数据更新API接口,使用JSON格式进行数据交换。

注意事项:
此接口支持协同编辑。当其他人正在编辑同一条记录时:

  • 打开的内容将是当前正在编辑的版本,而非已保存的版本。
  • 对内容的修改不会直接保存到数据库,需要当前编辑者手动保存。
  • 如果当前没有其他人在编辑,修改会直接保存,无需手动操作。

接口命令的执行顺序是 del » delModule » addModule » add » modify。

在调用API时,在Header里要加入如下的信息:

Authorization: Bearer {AccessToken}

AccessToken 的获取方式,见“认证接口”

2.  接口调用

请求URL: https://eln.iphy.ac.cn:61262/eln_api/update
https://eln.iphy.ac.cn:61263/matelab/index.php?do=eln_api&action=update(已废弃)

参数
eln 必填。字符串。记录本名称。
user 选填。字符串。如果是自己的记录本,可不填写;他人的合作编辑记录本,需要填写记录本所有者的Email
uid 必填。字符串。记录的唯一ID;
del 选填。数组。删除模块中的数据命令组合。del 命令只能删除表单、表格和文件集模块中的数据。具体格式见下面的“del 命令”表格;
delModule 选填。数组。删除模块命令组合,具体格式见下面的“delModule 命令”表格;
addModule 选填。数组。新增模块命令组合,具体格式见下面的“addModule 命令”表格;
add 选填。数组。新增数据命令组合,具体格式见下面的 “add 命令” 表格;
modify 选填。数组。更新命令组合,具体格式见下面的 “modify 命令” 表格;
quote 选填。数组。用于引用其他记录的数据。请确保被引用的数据是存在的,否则引用不会被替换;
  • name: 必填。字符串。命名此引用,并在引用此数据的位置调用此命名。使用 #quote{name} 格式引用数据;
  • uid: 必填。字符串。记录的UID,以此为依据调用记录。注意:仅能读取当前记录本中的数据;
  • path: 必填。数组。数据在记录中的位置。具体写法见”检索“接口的说明。

 

del 命令
path 必填。数组。要删除的值所在的路径。具体定义见检索API说明。与检索API的不同是,此接口 path 支持负数,表示从后往前计数,例如,-1表示最后一个,-2为倒数第二个。另外一点不同是,对于表格模块,path 1 为整数时,删除的是行,字符串则为删除名为此字符串的列。

 

delModule 命令
name 必填。数组。要删除的模块的名称

 

modify 命令
data 必填。更新的值。根据要更新的目标的格式,值的格式有不同的要求;
  • 表单或表格中的文件:可用 #file{name} 或 #base64{filename.ext,base64code}格式的文本
  • 文件集中的文件:数组格式,{"file":"#base64{filename.ext,base64code}", "text":"图片描述文本"}
  • 文本:字符串,可以是 #quote{name} 方式的引用
  • 数字:数字,可以是 #quote{name} 方式的引用
  • 日期:2000-12-31格式,可以是 #quote{name} 方式的引用
  • 时间:23:59 格式,可以是 #quote{name} 方式的引用
path 必填。数组。要更新的值所在的路径。具体定义见检索API说明。与检索API的不同是,此接口 path 支持负数,表示从后往前计数,例如,-1表示最后一个,-2为倒数第二个。

 

addModule 命令
name 必填。字符串。如果与现有模块冲突,则不会报错、也不会重复添加;
type 必填。字符串。新增模块的类型。可选值为:“form”,“table”,“files”,“richtext”,  “echarts”;
data 选填。字符串。仅对 type 为 “richtext”和“echarts”类型的模块生效,用于富文本模块的初始值。也可不设置,这样初始值为空。

 

add 命令
module 必填。字符串。指定数据增加到的模块名称(只允许指定表单、表格或文件集模块)。此模块名可以为现有的模块,也可是同一请求的 addModule 命令新增的模块;
type 表单模块中新增项目或表格中增加列时必填,其他情况不必填写。字符串。可选 “text”,“number”,“file”,“date”,“time”,“richtext”,“bool”;
name 更新表单模块时必填,表格模块添加列时必填,文件集不必填写。字符串。新插入的表单项目或表格列的名字。
row 表格模块新行时必填,其他情况不必填写。整数 0 或 -1。0 表示新插入行位于表格第一行,-1表示插入到表格最后。
path

path 参数仅用于指定文件集模块中文件的存储路径,是一个可选参数。path 以数组形式表示文件夹层级,数组的第一个元素代表一级文件夹,第二个元素代表二级文件夹,以此类推。如果不提供 path 参数,文件默认存储在根目录下。

文件夹命名需遵循以下规范:

  1. 文件夹名称不能超过 254 个字符。
  2. 名称不能包含操作系统文件系统保留字符,如 \ / : * ? " < > |。
  3. 如果指定路径中某一级文件夹不存在,系统会自动创建。

注意: 上传文件时,如果目标文件夹已存在同名文件,新文件会覆盖原有文件

data

除了表格插入新行或列之外必填。要插入的数据。根据目标的格式,值的格式有不同的要求;

插入表单文件项目时

  • 对于文件项目,如果 name 指定的项存在,则 data 不能是数组。这时data 数据会附加到name 指定的项目后。如果name 指定的项不存在,则data必须为一个或多个文件内容构成的数组。

插入表单项目、文件集中的图片时

  • 表单或表格中的文件:可用 #file{name} 或 #base64{filename.ext,base64code}格式的文本
  • 文件集中的文件:数组格式,{"file":"#base64{filename.ext,base64code}", "text":"文件描述文本"}
  • 文本:字符串,可以是 #quote{name} 方式的引用
  • 数字:数字,可以是 #quote{name} 方式的引用
  • 日期:2000-12-31格式,可以是 #quote{name} 方式的引用
  • 时间:23:59 格式,可以是 #quote{name} 方式的引用

示例

{
    "eln": "记录本名称",
    "user": "test@iphy.ac.cn",
    "uid": "VUCBG5CLJQR4417DTC8FGS2KDP",
    "del": [
        {
            "path": ["Table 删除表的一列", "列的名称"],
        },
        {
            "path": ["Table 删除表的一行", -1],
        },
        {
            "path": ["Form", "text"],
        },
        {
            "path": ["Images", 2],
        }
    ],
    "modify": [
        {
            "path": ["Table", "column", 1],
            "data": "#quote{n1}"
        },
        {
            "path": ["Images", 1],
            "data": {
                "file": "#base64{filename.ext,base64code}",
                "text": "图片描述"
            }
        },
        {
            "path": ["Form", "text"],
            "data": "test"
        },
        {
            "path": ["Form", "file"],
            "data": "#base64{filename.ext, base64code}"
        }
    ],
    "delModule": [
        {
            "name": "模块名1"
        },
        {
            "name": "模块名2",
        }
    ],
    "addModule": [
        {
            "name": "模块名1",
            "type": "form"
        },
        {
            "name": "模块名2",
            "type": "table"
        },
        {
            "name": "富文本模块",
            "type": "richtext",
            "data": "<p>内容</p>",
        },
        {
            "name": "Echarts 图表模块",
            "type": "echarts",
            "style": "polar",
            "data": {
                "series: {
                    "data": [150, 230, 224, 218, 135, 147, 260]
                }
            }
        }
    ],
    "add": [
        //文件集模块中新增文件。使用path指定文件所在文件夹。如果不指定path,则放在根目录中。
        {
            "module": "files module name",
            "path": ["folderLevel1","folderLevel2","folderLevel3"],
            "data": {"file":"#file{code}","text":"说明"}
        },
        {
            "module": "form module name",
            "type": "text",
            "name": "item name",
            "data": "文本内容,在名为 form modeule name 的表单中插入一项名为 item name 的文本项"
        },
        {
            "module": "form module name",
            "type": "file",
            "name": "item name",    //由于 data 为数组,会新增一个名为 name 的表单文件项,data 中的数据作为此表单项的多个文件
            "data": ["#file{name}", "#base64{file.ext,base64code}"]
        },
        {
            "module": "form module name",
            "type": "file",
            "name": "item name",    //由于 data 不是数组,会按name 查找现有的表单项,并在其后增加一行 data 中的数据
            "data": "#base64{file.ext, base64code}"
        },
        //在表格最后增加一个新行
        {
            "module": "table module name",
            "row": -1,    
        },
        //在表格中新增一列
        {
            "module": "table module name",
            "type": "text",
            "name": "列名"
        },
        {
            "module": "images module name",
            "data": {"file": "#base64{file.ext,base64code}", "text": "图片描述文本"}
        }
    ],
    "quote": [
        {
            "name": "n1",
            "eln": "记录本名称",
            "uid": "VUCBG5CLJQR4417DTC8FGS2KDP",
            "path": ["表格模板名称", "列名", 1]
        },
        {
            "name": "n2",
            "eln": "记录本名称",
            "uid": "DTC8FGS2KDPVUCBG5CLJQR4417",
            "path": ["表单模板名称", "文本框"]
        }
    ]
}

3.  返回信息

code 错误代码;
  • 0: 成功;
  • 1: 认证 Token 信息无效;
  • 2: 错误;
  • 3: 服务器原因错误;
  • 4: 数据格式错误; 
  • 'refresh': 认证 Token 过期,需使用刷新Token重新获取。
msg 错误描述。
errs 数据格式错误详细信息列表

返回错误示例

{
    "code": 4,
    "msg": "多处错误,详见 errs",
    "errs": ["value 应为数字(modify:0)"]
}

返回成功示例

{
    "code": 0,
    "msg": "数据更新成功"
}