MCP Python API 接口文档 - 表单体系
1. 表单单条数据
1.1 单条数据创建
python调用方法名: bmcp.form_create_single_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| data | Object | 是 | 单行数据 |
响应结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| code | int | 是 | 执行结果码,200代表成功,其他代表失败 |
| dataId | string | 否 | 数据id,执行失败返回空 |
| msg | string | 否 | code非200时的错误详情 |
入参和响应示例:
- 入参示例:
{
"appId": "efesage545e4egsage",
"formId":"8518seges8e83w4hgehe",
"useUtcFormat":true,
"is_start_workflow":true,
"is_start_event":false,
"data":{
"单行文本": "张三",
"多行文本": "webapi",
"数字": 8,
"日期时间": "2019-01-01 11:11:11",
"单选按钮组": "一年级",
"复选框组": [
"选项1",
"选项2"
],
"下拉框": "女",
"下拉复选框": [
"选项1",
"选项2"
],
"地址": {
"province": "湖南省",
"city": "长沙市",
"district": "芙蓉区",
"detail": "韶山北路"
},
"定位": {
"province": "湖南省",
"city": "长沙市",
"district": "芙蓉区",
"detail": "韶山北路",
"lnglatXY": [
112.99627,
28.19393
]
},
"图片": [
{
"name": "logo.png",
"url": "https://doc.testyun.com/doc/images/logo.png"
},
{
"name":"test1.json",
"content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMj“
}
],
"附件": [
{
"name": "logo.png",
"url": "https://doc.testyun.com/doc/images/logo.png"
},
{
"name":"test2.json",
"content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMjM0ODBiM2EiLAog“
}
],
"子表单": [
{
"单行文本1": "张三"
},
{
"单行文本1": "张三"
}
],
"成员单选": "46b842969dfef8eb1a9df35c",
"成员多选": [
"46b842969dfef8eb1a9df35c"
],
"部门单选": "51d1177b964603db9e60a962",
"部门多选": [
"51d1177b964603db9e60a962"
]
}
}
- 响应示例
{
"code": 200,
"dataId": "9f97469aae84d9b5d2810e09",
"msg": ""
}
Python插件开发代码示例:
import bmcp
def form_create_single_data(args: Args) -> Output:
#插件定义好入参后除了动态部分,其他部分无需调整的可以直接按如下方式继承
params = args.params
# 参数内容
params["data"] = {
"单行文本": "张三",
"多行文本": "webapi",
"数字": 8,
"日期时间": "2019-01-01 11:11:11",
"单选按钮组": "一年级",
"复选框组": [
"选项1",
"选项2"
],
"下拉框": "女",
"下拉复选框": [
"选项1",
"选项2"
],
"地址": {
"province": "湖南省",
"city": "长沙市",
"district": "芙蓉区",
"detail": "韶山北路"
},
"定位": {
"province": "湖南省",
"city": "长沙市",
"district": "芙蓉区",
"detail": "韶山北路",
"lnglatXY": [
112.99627,
28.19393
]
},
"图片": [
{
"name": "logo.png",
"url": "https://doc.testyun.com/doc/images/logo.png"
},
{
"name":"test1.json",
"content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMj“
}
],
"附件": [
{
"name": "logo.png",
"url": "https://doc.testyun.com/doc/images/logo.png"
},
{
"name":"test2.json",
"content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMjM0ODBiM2EiLAog“
}
],
"子表单": [
{
"单行文本1": "张三"
},
{
"单行文本1": "张三"
}
],
"成员单选": "46b842969dfef8eb1a9df35c",
"成员多选": [
"46b842969dfef8eb1a9df35c"
],
"部门单选": "51d1177b964603db9e60a962",
"部门多选": [
"51d1177b964603db9e60a962"
]
}
}
result = bmcp.form_create_single_data(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
1.2 单条数据编辑
python调用方法名: bmcp.form_edit_single_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| dataId | string | 是 | 数据id |
| data | Object | 是 | 修改数据,可以只传需要修改的字段即可 |
响应结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| code | int | 是 | 执行结果码,200代表成功,其他代表失败 |
| msg | string | 否 | code非200时的错误详情 |
入参和响应示例:
-
入参示例:
{ "appId": "efesage545e4egsage", "formId":"8518seges8e83w4hgehe", "dataId":"c1b840ab8865b313etj54j78", "data":{ "单行文本": "张三", "多行文本": "webapi", "数字": 8, "日期时间": "2019-01-01 11:11:11", "单选按钮组": "一年级", "复选框组": [ "选项1", "选项2" ], "下拉框": "女", "下拉复选框": [ "选项1", "选项2" ], "地址": { "province": "湖南省", "city": "长沙市", "district": "芙蓉区", "detail": "韶山北路" }, "定位": { "province": "湖南省", "city": "长沙市", "district": "芙蓉区", "detail": "韶山北路", "lnglatXY": [ 112.99627, 28.19393 ] }, "图片": [ { "name": "logo.png", "url": "https://doc.testyun.com/doc/images/logo.png" }, { "name":"test1.json", "content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMj“ } ], "附件": [ { "name": "logo.png", "url": "https://doc.testyun.com/doc/images/logo.png" }, { "name":"test2.json", "content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMjM0ODBiM2EiLAog“ } ], "子表单": [ { "单行文本1": "张三" }, { "单行文本1": "张三" } ], "成员单选": "46b842969dfef8eb1a9df35c", "成员多选": [ "46b842969dfef8eb1a9df35c" ], "部门单选": "51d1177b964603db9e60a962", "部门多选": [ "51d1177b964603db9e60a962" ] } } -
响应示例
{
"code": 200,
"msg": ""
}
Python插件开发代码示例:
import bmcp
def form_edit_single_data(args: Args) -> Output:
params = args.params
params["dataId"] = "755egag7erthh44wef774" #这里不传params就会继承插件配置的默认dataId
params["data"] = {
"单行文本": "张三",
"多行文本": "webapi",
"数字": 8,
"日期时间": "2019-01-01 11:11:11",
"单选按钮组": "一年级",
"复选框组": [
"选项1",
"选项2"
],
"下拉框": "女",
"下拉复选框": [
"选项1",
"选项2"
],
"地址": {
"province": "湖南省",
"city": "长沙市",
"district": "芙蓉区",
"detail": "韶山北路"
},
"定位": {
"province": "湖南省",
"city": "长沙市",
"district": "芙蓉区",
"detail": "韶山北路",
"lnglatXY": [
112.99627,
28.19393
]
},
"图片": [
{
"name": "logo.png",
"url": "https://doc.testyun.com/doc/images/logo.png"
},
{
"name":"test1.json",
"content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMj“
}
],
"附件": [
{
"name": "logo.png",
"url": "https://doc.testyun.com/doc/images/logo.png"
},
{
"name":"test2.json",
"content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMjM0ODBiM2EiLAog“
}
],
"子表单": [
{
"单行文本1": "张三"
},
{
"单行文本1": "张三"
}
],
"成员单选": "46b842969dfef8eb1a9df35c",
"成员多选": [
"46b842969dfef8eb1a9df35c"
],
"部门单选": "51d1177b964603db9e60a962",
"部门多选": [
"51d1177b964603db9e60a962"
]
}
}
result = bmcp.form_edit_single_data(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
1.3 单条数据删除
python调用方法名: bmcp.form_delete_single_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| dataId | string | 是 | 数据id |
响应结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| code | int | 是 | 执行结果码,200代表成功,其他代表失败 |
| msg | string | 否 | code非200时的错误详情 |
入参和响应示例:
- 入参示例:
{
"appId": "efesage545e4egsage",
"formId":"8518seges8e83w4hgehe",
"dataId":"c1b840ab8865b313etj54j78"
}
- 响应示例:
{
"code": 200,
"msg": ""
}
Python插件开发代码示例:
import bmcp
def form_delete_single_data(args: Args) -> Output:
params = args.params
params["dataId"] = "755egag7erthh44wef774" #这里不传params就会继承插件配置的默认dataId
result = bmcp.form_delete_single_data(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
1.4 单条数据查询
python调用方法名: bmcp.form_query_single_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| dataId | string | 是 | 数据id |
响应结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| code | int | 是 | 执行结果码,200代表成功,其他代表失败 |
| msg | string | 否 | code非200时的错误详情 |
入参和响应示例:
- 入参示例:
{
"appId": "efesage545e4egsage",
"formId":"8518seges8e83w4hgehe",
"dataId":"c1b840ab8865b313etj54j78"
}
- 响应示例:
{
"_id": "2a9142adb53313695ace2ad",
"_widget_1788868513385": "2026-09-17 16:00:00",
"_widget_1788868575503": "569a5c86847c84762e436092",
"appId": "540559aff5e7e4452f3c4295",
"chargers_name": "",
"createTime": "2026-09-08 17:24:14",
"creator": {
"_id": "5e8ceaa6545cdd9973d9e16",
"name": "谭一测试"
},
"entryId": "e5b64bb7b1caa82472ae867",
"flowDecision": {},
"ip": "175.8.126.152",
"isbackup": 0,
"label": "1",
"updateTime": "2026-09-09 11:24:52",
"updater": {
"_id": "5e8ceaa6545cd93973d9e16",
"name": "谭一测试"
},
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36",
"下拉复选框": [
"选项1",
"选项2",
"选项3"
],
"单行文本": "1",
"成员单选": {
"_id": "5e8ceaa6545cdd9973d9e16",
"mode": "member",
"nickname": "谭一测试",
"status": 0
},
"成员多选": [
{
"_id": "5e8ceaa6545cd93973d9e16",
"mode": "member",
"nickname": "谭一测试",
"status": 0
},
{
"_id": "5ae9b2e76347bd11c13c9ba",
"mode": "member",
"nickname": "清随心",
"status": 2
}
],
"部门单选": {
"_id": "516c1997586430ec3284d0c",
"mode": "dept",
"nickname": "经理办公室",
"status": 1
},
"部门多选": [
{
"_id": "555078d3d8fb3c6d874e9de",
"mode": "dept",
"nickname": "销售部",
"status": 1
},
{
"_id": "571195f980aa3c6219ad76a",
"mode": "dept",
"nickname": "市场部",
"status": 1
}
]
}
Python插件开发代码示例:
import bmcp
def form_query_single_data(args: Args) -> Output:
params = args.params
params["dataId"] = "755egag7erthh44wef774" #这里不传params就会继承插件配置的默认dataId
result = bmcp.form_query_single_data(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
2. 表单批量数据
2.1 批量数据新增
python调用方法名: bmcp.form_batch_data_create
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| dataId | string | 是 | 数据id |
响应结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| code | int | 是 | 执行结果码,200代表成功,其他代表失败 |
| successCount | int | 是 | 成功的条数 |
| failedCount | int | 是 | 失败的条数 |
| failed | Object Array | 否 | 失败的数据 |
| _id | stirng | 否 | 数据id, 创建一条数据成功时返回 |
| batch_id | string | 否 | 批量id, 创建多条数据成功时返回,可以作为批量查询的凭据 |
入参和响应示例:
入参示例:
{
"appId": "efesage545e4egsage",
"formId":"8518seges8e83w4hgehe",
"dataId":"c1b840ab8865b313etj54j78",
"data":[
{
"单行文本":"张三",
"多行文本":"李四",
"数字":"25",
"日期时间": "2019-01-01 11:11:11",
"单选按钮组": "一年级",
"复选框组": [
"选项1",
"选项2"
],
"下拉框": "女",
"下拉复选框": [
"选项1",
"选项2"
],
"地址": {
"province": "湖南省",
"city": "长沙市",
"district": "芙蓉区",
"detail": "韶山北路"
},
"定位": {
"province": "湖南省",
"city": "长沙市",
"district": "芙蓉区",
"detail": "韶山北路",
"lnglatXY": [
112.99627,
28.19393
]
},
"图片": [
{
"name": "logo.png",
"url": "https://doc.testyun.com/doc/images/logo.png"
},
{
"name":"test1.json",
"content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMj“
}
],
"附件": [
{
"name": "logo.png",
"url": "https://doc.testyun.com/doc/images/logo.png"
},
{
"name":"test2.json",
"content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMjM0ODBiM2EiLAog“
}
],
"子表单": [
{
"单行文本1": "张三"
},
{
"单行文本1": "张三"
}
],
"成员单选": "46b842969dfef8eb1a9df35c",
"成员多选": [
"46b842969dfef8eb1a9df35c"
],
"部门单选": "51d1177b964603db9e60a962",
"部门多选": [
"51d1177b964603db9e60a962"
]
}
]
}
- 响应示例:
{
"code": 200,
"successCount": 1,
"failedCount": 0
}
Python插件开发代码示例:
import bmcp
# 具体字段类型和使用方式请参考MCP API文档
def form_batch_data_create(args: Args) -> Output:
# args.params内容为MCP配置的入参
params = args.params
params["appId"] = "550606b07bcc0d41cd9b2de"
params["formId"] = "5b97538e65451aef9317653"
params["data"] = [{"单行文本": "张三", "数字": 8}, {"单行文本": "李四", "数字": 10}]
result = bmcp.form_batch_data_create(params)
return Output(result)
2.2 批量数据查询
python调用方法名: bmcp.form_batch_data_list
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| dataId | string | 是 | 数据id |
| filter | Object | 否 | 过滤条件 |
| filter.rel | String | 是 | 筛选组合关系,and或or |
| filter.cond | Object | 是 | 过滤条件列表 |
| filter.cond.field | String | 是 | 字段别名 |
| filter.cond.method | String | 是 | 过滤方法 |
| filter.cond.value | String | 是 | 过滤值 |
响应结构:
| 字段名 | 类型 | 是否必填 |
|---|---|---|
| data | Object Array | 数据 |
入参和响应示例:
入参示例:
{
"appId": "5d7b86502d5e2b3443587322",
"formId":"b7a44ce5ad315a49688fd49d",
"filter":{
"rel":"and",
"cond":[
{
"field":"单行文本",
"method":"eq",
"value":["dddd"],
}
]
}
}
响应示例:
{
"data": [
{
"appId": "5d7b86522d5e2b3443587322",
"entryId": "b7a44ce3ad315a49688fd49d",
"creator": {
"name": "张三",
"_id": "5d66359813f33ef2e45916f2"
},
"deleter": "",
"updater": {
"name": "张三",
"_id": "5d66359813f33ef2e45916f2"
},
"createTime": "2026-06-19 11:46:53",
"updateTime": "2026-06-19 14:22:30",
"deleteTime": null,
"_id": "755egag7erthh44wef774",
"flowState": "0",
"单行文本": "dddd"
}
]
}
Python插件开发代码示例:
import bmcp
def form_batch_data_list(args: Args) -> Output:
params = args.params
params["dataId"] = "755egag7erthh44wef774" #这里不传params就会继承插件配置的默认dataId
result = bmcp.form_batch_data_list(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
2.3 批量数据修改
python调用方法名: bmcp.form_batch_data_update
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| dataId | string | 否 | 数据id |
| field | string | 是 | 更新字段 |
| value | string | 是 | 更新的值 |
| filter | object | 否 | 过滤条件 |
| filter.rel | string | 是 | 筛选组合关系,and或or |
| filter.cond | Object | 是 | 过滤条件列表 |
| filter.cond.field | string | 是 | 字段别名 |
| filter.cond.method | string | 是 | 过滤方法 |
| filter.cond.value | string array | 是 | 过滤值 |
响应结构:
| 字段名 | 类型 | 是否必填 |
|---|---|---|
| code | int | 执行结果码,200代表成功,其他代表失败 |
| msg | string | code非200时的错误详情 |
| total | int | 总数据量 |
failed |
int | 失败的条数 |
| success | int | 成功的条数 |
入参和响应示例:
- 入参示例:
{
"appId": "5d7b86502d6e2b3443587322",
"formId": "c4b34a9c87fe342244ff72d3",
"filter":{
"rel":"and",
"cond":[
{
"field":"单行文本",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":"ewtewa"
},
{
"field":"子表单1.子表单_单行文本",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":"sss"
}
]
}
}
- 响应示例:
{
"code": 200,
"msg": "success",
"total": 1,
"failed": 0,
"success": 1,
}
Python插件开发代码示例:
import bmcp
def form_batch_data_update(args: Args) -> Output:
params = args.params
params["dataId"] = "755egag7erthh44wef774" #这里不传params就会继承插件配置的默认dataId
result = bmcp.form_batch_data_update(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
2.4 批量数据删除
python调用方法名: bmcp.form_batch_data_delete
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| filter | Object | 否 | 筛选条件 |
| filter.rel | string | 是 | 筛选组合关系,and或or |
| filter.cond | Object | 是 | 过滤条件列表 |
| filter.cond.field | string | 是 | 字段别名 |
| filter.cond.method | string | 是 | 过滤方法 |
| filter.cond.value | string array | 是 | 过滤值 |
响应结构:
| code | int | 执行结果码,200代表成功,其他代表失败 |
| msg | string | 执行结果描述 |
| count | int | 删除的数据条数,调用成功才会返回 |
入参和响应示例:
- 入参示例:
{
"appId": "5d7b86502d5e2b3443587322",
"formId": "c4b34a9c8cfe342244ff72d3",
"filter":{
"rel":"and",
"cond":[
{
"field":"单行文本",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":["2002"],
"valueMode":"item"
},
{
"field":"_widget_1781660609782._widget_1781660609808",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":["aaa"],
"valueMode":"item"
}
]
}
}
- 响应示例:
{
"code": 200,
"msg":"success"
"count":1
}
Python插件开发代码示例:
import bmcp
def form_batch_data_delete(args: Args) -> Output:
params = args.params
params["appId"] = "5d7b86502d5e2b3443587322",
params["formId"] = "c4b34a9c8cfe342244ff72d3",
params["filter"] = {
"rel":"and",
"cond":[
{
"field":"单行文本",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":["2002"],
"valueMode":"item"
},
{
"field":"_widget_1781660609782._widget_1781660609808",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":["aaa"],
"valueMode":"item"
}
]
}
result = bmcp.form_batch_data_delete(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
3. 子表单操作
3.1 单条数据新增
python调用方法名: bmcp.subform_create_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| sub | string | 是 | 子表单别名 |
| dataId | string | 是 | 数据id |
| datas | Object Array | 是 | 需要写入的子表单数据 |
响应结构:
| 字段名 | 类型 | 是否必填 |
|---|---|---|
| failedCode | int | 执行结果码,0代表成功,其他代表失败 |
| success | int | 成功条数 |
| failed | Object | 成功时返回为空 |
入参和响应示例:
- 入参示例:
{
"appId": "efesage545e4egsage",
"formId":"8518seges8e83w4hgehe",
"sub":"子表单",
"dataId":"eaeg848ge48wsge4weseg",
"datas":[
{
"单行文本_子表单": "张三",
"多行文本1": "webapi",
"数字1": 8,
"日期时间1": "2019-01-01 11:11:11",
"单选按钮组1": "一年级",
"复选框组1": [
"选项1",
"选项2"
],
"下拉框1": "女",
"成员单选1": "56581f14f37f4c9a0152c6a6",
"成员多选1": [
"56581f14f37f4c9a0152c6a6"
],
"部门单选1": "51d1177b964603db9e60a962",
"部门多选1": [
"51d1177b964603db9e60a962"
]
}
]
}
- 响应示例:
{
"failed": null,
"failedCode": 0,
"success": 1
}
Python插件开发代码示例:
import bmcp
def subform_create_data(args: Args) -> Output:
params = args.params
# 获取传入参数
appId = params.get("appId", "")
formId = params.get("formId", "")
dataId = params.get("dataId", "")
sub = params.get("sub", "")
# api参数
ret = {
"appId": appId,
"formId": formId,
"sub":sub,
"dataId":dataId,
"datas":[
{
"单行文本_子表单": "张三",
"多行文本1": "webapi",
"数字1": 8,
"日期时间1": "2019-01-01 11:11:11",
"单选按钮组1": "一年级",
"复选框组1": [
"选项1",
"选项2"
],
"下拉框1": "女",
"成员单选1": "56581f14f37f4c9a0152c6a6",
"成员多选1": [
"56581f14f37f4c9a0152c6a6"
],
"部门单选1": "51d1177b964603db9e60a962",
"部门多选1": [
"51d1177b964603db9e60a962"
]
}
]
}
result = bmcp.subform_create_data(ret)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
3.2 单条数据修改
python调用方法名: bmcp.subform_update_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| dataId | string | 是 | 数据id |
| sub | string | 是 | 子表单别名 |
| datas | Object Array | 是 | 更新内容 |
响应结构:
| 字段名 | 类型 | 是否必填 |
|---|---|---|
| code | int | 执行结果码,200代表成功,其他代表失败 |
total |
int | 总共修改数据条数 |
success |
int | 修改成功的数据条数 |
入参和响应示例:
- 入参示例:
{
"appId": "5d7b86502d5e2b3443587322",
"formId": "c4b34a9c8cfe342244ff72d3",
"sub":"子表单",
"dataId":"5959407bb9a9990a62407c62",
"datas":[
{
"单行文本_子表单": "张三",
"多行文本1": "webapi",
"数字1": 8,
"日期时间1": "2019-01-01 11:11:11",
"单选按钮组1": "一年级",
"复选框组1": [
"选项1",
"选项2"
],
"下拉框1": "女",
"成员单选1": "56581f14f37f4c9a0152c6a6",
"成员多选1": [
"56581f14f37f4c9a0152c6a6"
],
"部门单选1": "51d1177b964603db9e60a962",
"部门多选1": [
"51d1177b964603db9e60a962"
]
}
]
}
- 响应示例:
{
"code": 200,
"success": 1,
"total": 1
}
Python插件开发代码示例:
import bmcp
def subform_update_data(args: Args) -> Output:
params = args.params
# 获取传入参数
appId = params.get("appId", "")
formId = params.get("formId", "")
dataId = params.get("dataId", "")
sub = params.get("sub", "")
# api参数
ret = {
"appId": appId,
"formId": formId,
"sub":sub,
"dataId":dataId,
"filter":{
"rel":"and",
"cond":[
{
"field":"单行文本1",
"method":"eq",
"value":"张三"
}
]
},
"datas":{
"单行文本1": "张三",
"多行文本1": "webapi",
"数字1": 8,
"日期时间1": "2019-01-01 11:11:11",
"单选按钮组1": "一年级",
"复选框组1": [
"选项1",
"选项2"
],
"下拉框1": "女",
"成员单选1": "56581f14f37f4c9a0152c6a6",
"成员多选1": [
"56581f14f37f4c9a0152c6a6"
],
"部门单选1": "51d1177b964603db9e60a962",
"部门多选1": [
"51d1177b964603db9e60a962"
]
}
}
result = bmcp.subform_update_data(ret)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
3.3 单条数据删除
python调用方法名: bmcp.subform_delete_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| dataId | string | 是 | 数据id |
| sub | string | 是 | 子表单别名 |
| filter | Obejct | 否 | 过滤条件 |
| filter.rel | string | 是 | 筛选组合关系,and或or |
| filter.cond | Object | 是 | 过滤条件列表 |
| filter.cond.field | string | 是 | 字段别名 |
| filter.cond.method | string | 是 | 过滤方法 |
| filter.cond.value | string array | 是 | 过滤值 |
响应结构:
| 字段名 | 类型 | 是否必填 |
|---|---|---|
| code | int | 执行结果码,200代表成功,其他代表失败 |
| msg | string | 结果描述 |
入参和响应示例:
- 入参示例:
{
"appId": "5d7b86502d5e2b3443587322",
"formId": "4c3543a59a2084d648eac387",
"dataId":"90984705b66ceafd69c06258",
"sub":"子表单",
"filter":{
"rel":"and",
"cond":[
{
"field":"单行文本",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":"ewtewa"
}
]
}
}
- 响应示例:
{
"code": 200,
"msg": "success"
}
Python插件开发代码示例:
import bmcp
# 具体字段类型和使用方式请参考MCP API文档
def subform_delete_data(args: Args) -> Output:
# args.params内容为MCP配置的入参
params = args.params
params["appId"] = "5d7b86502d5e2b3443587322"
params["formId"] = "4c3543a59a2084d648eac387"
params["dataId"] = "90984705b66ceafd69c06258"
params["sub"] = "子表单"
params["filter"] = {
"rel":"and",
"cond":[
{
"field":"单行文本",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":"ewtewa"
}
]
}
result = bmcp.subform_delete_data(params)
return Output(result)
3.4 批量数据新增
python调用方法名: bmcp.subform_batch_create_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| sub | string | 是 | 子表单别名 |
| filter | Obejct | 否 | 过滤条件 |
| filter | Obejct | 否 | 过滤条件 |
| filter.rel | string | 是 | 筛选组合关系,and或or |
| filter.cond | Object | 是 | 过滤条件列表 |
| filter.cond.field | string | 是 | 字段别名 |
| filter.cond.method | string | 是 | 过滤方法 |
| filter.cond.value | string array | 是 | 过滤值 |
| datas | Object Array | 是 | 子表单数据 |
响应结构:
| 字段名 | 类型 | 是否必填 |
|---|---|---|
| code | int | 执行结果码,200代表成功,其他代表失败 |
| msg | string | 结果描述 |
入参和响应示例:
入参示例:
{
"appId": "5d7b86502d5e2b3443587322",
"formId": "c4b34a9c8cfe342244ff72d3",
"filter":{
"rel":"and",
"cond":[
{
"field":"单行文本",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":"ewtewa"
}
]
},
"datas":[
{
"单行文本":"张三3001",
"多行文本":"awq",
"数字":"25",
"多选框":["选项1", "选项2"]
},
{
"单行文本":"张三3001",
"多行文本":"awq",
"数字":"25",
"多选框":["选项1", "选项2"]
}
]
}
- 响应示例:
{
"code": 200,
"msg": "success"
}
Python插件开发代码示例:
import bmcp
# 具体字段类型和使用方式请参考MCP API文档
def subform_batch_create_data(args: Args) -> Output:
# args.params内容为MCP配置的入参
params = args.params
params["appId"] = "550606b07bcc60d41cd9b2de"
params["formId"] = "5b97538e651451aef9317653"
params["datas"] = [{"单行文本": "张三", "数字": 8}, {"单行文本": "李四", "数字": 10}]
result = bmcp.subform_batch_create_data(params)
return Output(result)
3.5 批量数据更新
python调用方法名: bmcp.subform_batch_update_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| sub | string | 是 | 子表单别名 |
响应结构:
| 字段名 | 类型 | 是否必填 |
|---|---|---|
| code | int | 执行结果码,200代表成功,其他代表失败 |
| total | int | 总数据量 |
| success | int | 成功条数 |
入参和响应示例:
- 入参示例:
{
"appId": "5d7b86502d5e2b3443587322",
"formId": "c4b34a9c8cfe342244ff72d3",
"filter":{
"rel":"and",
"cond":[
{
"field":"单行文本",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":"ewtewa"
}
]
},
"datas":[
{
"单行文本":"张三3001",
"多行文本":"awq",
"数字":"25",
"多选框":["选项1", "选项2"]
},
{
"单行文本":"张三3001",
"多行文本":"awq",
"数字":"25",
"多选框":["选项1", "选项2"]
}
]
}
- 响应示例:
{
"code": 200,
"total": 1,
"success": 1
}
Python插件开发代码示例:
import bmcp
# 具体字段类型和使用方式请参考MCP API文档
def subform_batch_update_data(args: Args) -> Output:
# args.params内容为MCP配置的入参
params = args.params
params["appId"] = "550606b07bcc60d41cd9b2de"
params["formId"] = "5b97538e651451aef9317653"
params["sub"] = "子表单"
params["filter"] = {"rel": "and", "cond": [{"field": "单行文本", "method": "eq", "value": "张三"}]}
params["datas"] = [{"单行文本_子表单": "新值"}]
result = bmcp.subform_batch_update_data(params)
return Output(result)
3.6 批量数据删除
python调用方法名: bmcp.subform_batch_delete_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| sub | string | 是 | 子表单别名 |
| filter | Object | 否 | 过滤条件 |
| filter | Obejct | 否 | 过滤条件 |
| filter.rel | string | 是 | 筛选组合关系,and或or |
| filter.cond | Object | 是 | 过滤条件列表 |
| filter.cond.field | string | 是 | 字段别名 |
| filter.cond.method | string | 是 | 过滤方法 |
| filter.cond.value | string array | 是 | 过滤值 |
响应结构:
| 字段名 | 类型 | 是否必填 |
|---|---|---|
| code | int | 执行结果码,200代表成功,其他代表失败 |
| msg | string | 执行结果描述 |
| total | int | 删除数据量 |
入参和响应示例:
- 入参示例:
{
"appId": "5d7b86502d5e2b3443587322",
"formId": "c4b34a9c8cfe342244ff72d3",
"filter":{
"rel":"and",
"cond":[
{
"field":"单行文本",
"hasEmpty":False,
"method":"like",
"type":"text",
"value":"ewtewa"
}
]
},
"datas":[
{
"单行文本":"张三3001",
"多行文本":"awq",
"数字":"25",
"多选框":["选项1", "选项2"]
},
{
"单行文本":"张三3001",
"多行文本":"awq",
"数字":"25",
"多选框":["选项1", "选项2"]
}
]
}
- 响应示例:
{
"code": 200,
"msg": "success",
"total": 1
}
Python插件开发代码示例:
import bmcp
# 具体字段类型和使用方式请参考MCP API文档
def subform_batch_delete_data(args: Args) -> Output:
# args.params内容为MCP配置的入参
params = args.params
params["appId"] = "550606b07bcc60d41cd9b2de"
params["formId"] = "5b97538e651451aef9317653"
params["sub"] = "子表单"
params["dataId"] = "7067493898b407dec4a5a754"
params["filter"] = {"rel": "and", "cond": [{"field": "单行文本", "method": "eq", "value": "张三"}]}
result = bmcp.subform_batch_delete_data(params)
return Output(result)
4. 应用
4.1 应用列表
python调用方法名: bmcp.app_list
入参结构:
无
响应结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| items | Object Array | 是 | |
| items._id | string | 是 | 应用分组id |
| items.appcount | int | 是 | 应用数量 |
| items.name | string | 是 | 分组名称 |
| items.apps | Object Array | 是 | |
| apps._id | string | 是 | 应用id |
| apps.appStatus | int | 是 | 应用状态 |
| apps.appType | int | 是 | 应用类型 |
| apps.appname | string | 是 | 应用名称 |
| apps.copyable | boolean | 是 | 是否可复制 |
| apps.deletable | boolean | 是 | 是否可删除 |
| apps.disable_export | boolean | 是 | 导出开关 |
| apps.dock | boolean | 是 | 是否互联 |
| apps.editable | boolean | 是 | 是否可编辑 |
| apps.parent | string | 是 | 上级应用id |
| apps.style | Object | 是 | 样式 |
| Style.color | int | 是 | |
| Style.icon | int | 是 |
入参和响应示例:
- 入参示例:
{}
- 响应示例:
{
"items": [
{
"_id": "default",
"appcount": 12,
"apps": [
{
"_id": "5d7b86502d5e2b3443587322",
"appStatus": 1,
"appType": 1,
"appname": "19111111111空白应用",
"copyable": True,
"deletable": True,
"disable_export": False,
"dock": False,
"editable": True,
"isFavorite": False,
"parent": "default",
"style": {
"color": 0,
"icon": 39
}
}
],
"name": "默认分组"
}
]
}
Python插件开发代码示例:
import bmcp
def app_list(args: Args) -> Output:
params = args.params
result = bmcp.app_list(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
4.2 应用下的表单列表
python调用方法名: bmcp.app_list_entry
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
响应结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| form | Object Array | |
| form.appId | string | 应用id |
| form.entryId | string | 表单id |
| form.hasCoop | boolean | |
| form.icon | int | |
| form.name | string | 表单名称 |
| form.type | string | 表单类型 |
入参和响应示例:
- 入参示例:
{
"appId":"5d7b86502d5e2b3443123456"
}
- 响应示例:
{
"form": [
{
"appId": "5d7b86502d5e2b3443587322",
"entryId": "d2204444955b1762ec711aad",
"hasCoop": true,
"icon": 0,
"name": "普通未命名表单",
"type": "form"
}
]
}
Python插件开发代码示例:
import bmcp
def app_list_entry(args: Args) -> Output:
params = args.params
result = bmcp.app_list_entry(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
4.3 表单基本信息
python调用方法名: bmcp.form_info
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
响应结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| formId | string | 表单id |
| hasCoop | string | |
| hasFlow | string | 是否流程 |
| name | boolean | 表单名称 |
| public | Object | |
| public.isPublic | boolean | |
| public.publicLink | string | |
| query | Object | |
| query.isPublic | boolean | |
| query.queryLink | string | |
| type | string | |
| widgets | Object Array | 字段数组 |
入参和响应示例:
- 入参示例:
{
"appId": "5d7b86502d5e2b3443587322",
"formId": "c4b34a9c8cfe342244ff72d3"
}
- 响应示例:
{
"formId": "c4b34a9c8cfe342244ff72d3",
"hasCoop": "1",
"hasFlow": false,
"name": "批量修改测试表单",
"public": {
"isPublic": false,
"publicLink": ""
},
"query": {
"isPublic": false,
"queryLink": ""
},
"type": "form",
"widgets": [
{
"isRequired": false,
"name": "单行文本",
"title": "单行文本",
"type": "text",
"widget": "_widget_1781660609616"
},
{
"isRequired": false,
"name": "多行文本",
"title": "多行文本",
"type": "textarea",
"widget": "_widget_1781660609635"
},
{
"isRequired": false,
"name": "数字",
"title": "数字",
"type": "number",
"widget": "_widget_1781660609652"
},
{
"isRequired": false,
"name": "日期时间",
"title": "日期时间",
"type": "datetime",
"widget": "_widget_1781660609673"
},
{
"isRequired": false,
"name": "下拉框",
"title": "下拉框",
"type": "combo",
"widget": "_widget_1781660609697"
},
{
"isRequired": false,
"name": "下拉复选框",
"title": "下拉复选框",
"type": "combocheck",
"widget": "_widget_1781660609721"
},
{
"isRequired": false,
"name": "附件",
"title": "附件",
"type": "upload",
"widget": "_widget_1784280381117"
},
{
"isRequired": false,
"name": "地址",
"title": "地址",
"type": "address",
"widget": "_widget_1781660609744"
},
{
"isRequired": false,
"name": "定位",
"title": "定位",
"type": "location",
"widget": "_widget_1781660609762"
},
{
"name": "子表单1",
"title": "子表单",
"type": "subform",
"widget": "_widget_1781660609782",
"isRequired": false,
"data": [
{
"isRequired": false,
"name": "子表单_单行文本",
"title": "单行文本",
"type": "text",
"widget": "_widget_1781660609808"
},
{
"isRequired": false,
"name": "子表单_数字",
"title": "数字",
"type": "number",
"widget": "_widget_1781660609864"
},
{
"isRequired": false,
"name": "子表单_附件",
"title": "附件",
"type": "upload",
"widget": "_widget_1784115923634"
},
{
"isRequired": false,
"name": "子表单_多行文本",
"title": "多行文本",
"type": "textarea",
"widget": "_widget_1782264622605"
},
{
"isRequired": false,
"name": "子表单_地址",
"title": "地址",
"type": "address",
"widget": "_widget_1782264621532"
},
{
"isRequired": false,
"name": "子表单_图片",
"title": "图片",
"type": "image",
"widget": "_widget_1782264621587"
},
{
"isRequired": false,
"name": "子表单_下拉框",
"title": "下拉框",
"type": "combo",
"widget": "_widget_1782264621796"
},
{
"isRequired": false,
"name": "子表单_下拉复选框",
"title": "下拉复选框",
"type": "combocheck",
"widget": "_widget_1782264622252"
},
{
"isRequired": false,
"name": "子表单_复选框组",
"title": "复选框组",
"type": "checkboxgroup",
"widget": "_widget_1782264621861"
},
{
"isRequired": false,
"name": "子表单_成员单选",
"title": "成员单选",
"type": "user",
"widget": "_widget_1782264621946"
},
{
"isRequired": false,
"name": "子表单_日期",
"title": "日期时间",
"type": "datetime",
"widget": "_widget_1782264622516"
},
{
"isRequired": false,
"name": "子表单_成员多选",
"title": "成员多选",
"type": "usergroup",
"widget": "_widget_1782264622037"
},
{
"isRequired": false,
"name": "子表单_部门单选",
"title": "部门单选",
"type": "dept",
"widget": "_widget_1782264622105"
},
{
"isRequired": false,
"name": "子表单_部门多选",
"title": "部门多选",
"type": "deptgroup",
"widget": "_widget_1782264622178"
}
]
}
]
}
Python插件开发代码示例:
import bmcp
def form_info(args: Args) -> Output:
params = args.params
result = bmcp.form_info(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
5. 文件
5.1 文件上传-通过外部url
python调用方法名: bmcp.form_upload_file_url
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| datas | Object Array | 是 | 文件信息列表 |
| datas.name | string | 是 | |
| datas.url | string | 是 | 必须是公网可以访问的地址 |
响应结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| Object Array | ||
| _id | string | |
| mime | string | |
| name | string | |
| qnKey | string | |
| size | int | |
| url | string |
入参和响应示例:
- 入参示例:
{
"appId": "5d7b86502d5e2b3443587322",
"formId": "c4b34a9c8cfe342244ff72d3",
"datas":[
{
"name":"3654_1648113567.png",
"url":"https://doc.testyun.com/upload/image/1/3654_1648113567.png"
}
]
}
- 响应示例:
[
{
"_id": "3ba04cdd8b85ac7e197dfcad",
"mime": "image/png",
"name": "3654_1648113567.png",
"qnKey": "cc95a95a1b9137f63b2881a8ec1b1fbe",
"size": 115224,
"url": "https://qiniu-media.test.com/3654_1648113567.png?attname=3654_1648113567.png"
}
]
Python插件开发代码示例:
import bmcp
def form_save_file(args: Args) -> Output:
params = args.params
result = bmcp.form_save_file(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
5.2 文件上传-直接上传文件内容
python调用方法名: bmcp.form_upload_file_content
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uid | int | 否 | 用户的uid, 未传该参数时默认获取当前操作者的,主要用于权限校验 |
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| datas | Object Array | 是 | 文件信息列表 |
| datas.name | string | 是 | 文件名 |
| datas.content | string | 是 | 文件内容,base64字符串 |
响应结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| code | int | |
| msg | string | |
| data | Object Array | |
| data._id | string | 文档 ID |
| data.bucket | string | 存储桶名称 |
| data.compressUrl | string | 压缩地址 |
| data.downloadUrl | string | 下载地址 |
| data.exifUrl | string | EXIF 信息地址 |
| data.mime | string | 媒体类型 |
| data.name | string | 名称 |
| data.originalUrl | string | 原始文件地址 |
| data.previewUrl | string | 预览地址 |
| data.previewUrlMedium | string | 中等预览 |
| data.qnKey | string | |
| data.size | string | 大小 |
| data.thumbUrl | string | 缩略地址 |
| data.thumbUrlMedium | string | |
| data.uploadTime | string | |
| data.uploader | string |
入参和响应示例:
- 入参示例:
{
"appId": "5d7b86502d5e2b3443587322",
"formId": "c4b34a9c8cfe342244ff72d3",
"datas":[
{
"name":"test.json",
"content":"ewogICAgImFwcF9pZCI6ICI1YmZiNDIxMGVhZWZkNzkwMjM0ODBiM2EiLAogICAgImZvcm1faWQiOiAiNTU3OGRjZDA3ZTI0NzQ0NDllZTQ5OTlkIiwKICAgICJwbGF0Zm9ybSI6ICJkaW5ndGFsayIsCiAgICAidHlwZSI6IFsKICAgICAgICAiY3VzdG9tI
gogICAgXSwKICAgICJ1c2VyX2lkIjogIjhhY2Y0YTA4YWU1MzI2ZjY4ZDNkNDllMSIsCiAgICAiZGF0YSI6IHsKICAgICAgICAiY3VzdG9tIjogewogICAgICAgICAgICAidGVtcGxhdGUiOiB7CiAgICAgICAgICAgICAgICAidGVtcGxhdGVfaWQiOiAiIiwKICAgICAgICAgICAgICAgICJ0aXRsZSI6ICLlt7LliLDmj5DphpLml7bpl7TvvIzor7flj4rml7blpITnkIYiLAogICAgICAgICAgICAgICAgImNvbnRlbnQiOiAiIiwKICAgICAgICAgICAgICAgICJwYXJhbXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQxIjogIiR7Zm9ybU5hbWV9IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJrZXlzIjogewogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkMSI6ICLooajljZXlkI3np7AiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIndpZGdldCI6IHt9LAogICAgICAgICAgICAgICAgImhhc0ZpbGVkIjogW10sCiAgICAgICAgICAgICAgICAicmVtYXJrIjogewogICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIiLAogICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjZjU4MjIwIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9"
}
]
}
- 响应示例:
{
"code": 200,
"data": [
{
"_id": "d25a4d45a5f89d5a1e2eeb7e",
"bucket": "file",
"compressUrl": "https://qiniu-media.test.com/FhOxX4M_j196QmiQNlXrDSFp5Mvy?imageView2/2/q/75",
"downloadUrl": "https://qiniu-media.test.com/FhOxX4M_j196QmiQNlXrDSFp5Mvy?attname=test.json",
"exifUrl": "https://qiniu-media.test.com/FhOxX4M_j196QmiQNlXrDSFp5Mvy?exif",
"mime": "application/json",
"name": "test.json",
"originalUrl": "https://qiniu-media.test.com/FhOxX4M_j196QmiQNlXrDSFp5Mvy",
"previewUrl": "https://qiniu-media.test.com/FhOxX4M_j196QmiQNlXrDSFp5Mvy?imageView2/2/w/1200/h/1200",
"previewUrlMedium": "https://qiniu-media.test.com/FhOxX4M_j196QmiQNlXrDSFp5Mvy?imageView2/2/w/450/h/450",
"qnKey": "FhOxX4M_j196QmiQNlXrDSFp5Mvy",
"size": 783,
"thumbUrl": "https://qiniu-media.test.com/FhOxX4M_j196QmiQNlXrDSFp5Mvy?imageView2/2/w/32/h/32",
"thumbUrlMedium": "https://qiniu-media.test.com/FhOxX4M_j196QmiQNlXrDSFp5Mvy?imageView2/2/w/65/h/65",
"uploadTime": "2026-07-25T10:06:47Z",
"uploader": "532c5cefac39aa2d6d1ae963"
}
],
"msg": "操作成功",
"requestId": "7df0a56287cd11f1a2d002420a0001d1"
}
Python插件开发代码示例:
import bmcp
def form_upload_file(args: Args) -> Output:
params = args.params
result = bmcp.form_upload_file(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
6. 聚合表操作
6.1 查询聚合表输出字段
python调用方法名: bmcp.aggregatetable_fields
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
响应结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| Object Array | ||
| aliasName | string | 字段别名 |
| name | string | 字段名 |
| text | string | 字段标签 |
| type | string | 字段类型 |
入参和响应示例:
- 入参示例:
{
"appId": "52b64298390f3f180f0c7cff",
"formId": "52d348d08c69a33b793c3adf"
}
- 响应示例:
[
{
"aliasName": "单行文本1",
"name": "_widget_1787206276222",
"text": "单行文本",
"type": "text"
},
{
"name": "_widget_1787206276231",
"text": "公式",
"type": "number"
}
]
Python插件开发代码示例:
import bmcp
def aggregatetable_fields(args: Args) -> Output:
params = args.params
params["appId"] = "52b64298390f3f180f0c7cff",
params["formId"] = "52d348d08c69a33b793c3adf"
result = bmcp.aggregatetable_fields(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
6.2 查询聚合表数据
python调用方法名: bmcp.aggregatetable_data_list
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| fields | Object Array | ||
| fields.aliasName | string | 字段别名 | |
| fields.name | string | 字段名 | |
| fields.text | string | 字段标签 | |
| fields.type | string | 字段类型 | |
| filter | Object | 否 | 筛选条件,同表单 |
响应结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| count | int | 总数据量 |
| data | Object Array | 动态表单数据 |
入参和响应示例:
- 入参示例:
{
"appId":"52b64298390f3f180f0c7cff",
"entryId":"52d348d08c69a33b793c3adf",
"fields":[
{
"aliasName": "单行文本1",
"name": "_widget_1787206276222",
"text": "单行文本",
"type": "text"
},
{
"name": "_widget_1787206276231",
"text": "公式",
"type": "number"
}
]
}
- 响应示例:
{
"count": 9,
"data": [
{
"_id": "2b0baee9d279d34fa1dfd71a",
"_widget_1787206276222": "11111",
"_widget_1787206276231": 0
},
{
"_id": "2e343a47b2741a347a45ec72",
"_widget_1787206276222": "23tgfwge",
"_widget_1787206276231": 0
},
{
"_id": "202a05c6e278d3e19afaca4f",
"_widget_1787206276222": "qqqqqqq",
"_widget_1787206276231": 0
},
{
"_id": "2111ff4bb69b12801063ed85",
"_widget_1787206276222": "revoke",
"_widget_1787206276231": 10
},
{
"_id": "22d02e669731cbade6a64b58",
"_widget_1787206276222": "sssss",
"_widget_1787206276231": 20
},
{
"_id": "2fa820cc1ad39a4e99283e9f",
"_widget_1787206276222": "test001",
"_widget_1787206276231": 40
},
{
"_id": "2bcc720f2981d1a68dbd66ff",
"_widget_1787206276222": "tttttt",
"_widget_1787206276231": 20
},
{
"_id": "220c6bbf3e1cdc639cea81c8",
"_widget_1787206276222": "wgwgewg",
"_widget_1787206276231": 20
},
{
"_id": "294e7d712742adbbb7a73a1d",
"_widget_1787206276222": "yyyyyy",
"_widget_1787206276231": 0
}
]
}
Python插件开发代码示例:
import bmcp
def aggregatetable_data_list(args: Args) -> Output:
params = args.params
result = bmcp.aggregatetable_data_list(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
6.3 查询聚合表数据总数
python调用方法名: bmcp.aggregatetable_data_count
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| appId | string | 是 | 应用id |
| formId | string | 是 | 表单id |
| fields | Object Array | ||
| fields.aliasName | string | 字段别名 | |
| fields.name | string | 字段名 | |
| fields.text | string | 字段标签 | |
| fields.type | string | 字段类型 |
响应结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| count | int | 数据量 |
入参和响应示例:
- 入参示例:
{
"appId":"52b64298390f3f180f0c7cff",
"entryId":"52d348d08c69a33b793c3adf",
"fields":[
{
"aliasName": "单行文本1",
"name": "_widget_1787206276222",
"text": "单行文本",
"type": "text"
},
{
"name": "_widget_1787206276231",
"text": "公式",
"type": "number"
}
]
}
- 响应示例:
{
"count": 9
}
Python插件开发代码示例:
import bmcp
def aggregatetable_data_count(args: Args) -> Output:
params = args.params
params["appId"] = "52b64298390f3f180f0c7cff"
params["entryId"] = "52d348d08c69a33b793c3adf"
result = bmcp.aggregatetable_data_count(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
7 数据视图操作
7.1 查询视图输出字段
python调用方法名: bmcp.etl_fields
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| appId | string | 是 | 应用id |
| formId | string | 是 | 输出表id |
响应结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| Object Array | ||
| alias | string | 字段别名 |
| name | string | 字段名 |
| text | string | 字段标签 |
| type | string | 字段类型 |
入参和响应示例:
入参示例:
{
"appId": "52b64298390f3f180f0c7cff",
"formId": "553c4406aad3a90877e87c67"
}
响应示例:
[
{
"name": "_widget_1789010599126",
"text": "单行文本",
"type": "text"
},
{
"name": "_widget_1789010599127",
"text": "成员单选",
"type": "user"
},
{
"name": "_widget_1789010599128",
"text": "成员多选",
"type": "usergroup"
},
{
"name": "_widget_1789010599129",
"text": "部门单选",
"type": "dept"
},
{
"name": "_widget_1789010599130",
"text": "提交人",
"type": "user"
},
{
"format": "yyyy-MM-dd HH:mm:ss",
"name": "_widget_1789010599131",
"text": "提交时间",
"type": "datetime"
},
{
"name": "_widget_1789010599132",
"text": "更新时间",
"type": "datetime"
},
{
"name": "_widget_1789010599133",
"text": "单行文本",
"type": "text"
},
{
"name": "_widget_1789010599134",
"text": "数字",
"type": "number"
}
]
Python插件开发代码示例:
import bmcp
def etl_fields(args: Args) -> Output:
params = args.params
params["appId"] = "52b64298390f3f180f0c7cff",
params["formId"] = "553c4406aad3a90877e87c67"
result = bmcp.etl_fields(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
7.2 查询视图数据总量
python调用方法名: bmcp.etl_count
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| appId | string | 是 | 应用id |
| formId | string | 是 | 输出表id |
| filter | object | 否 | |
| filter.rel | string | 是 | 筛选组合关系,and或or |
| filter.cond | Object | 是 | 过滤条件列表 |
| filter.cond.field | string | 是 | 字段别名 |
| filter.cond.method | string | 是 | 过滤方法 |
| filter.cond.value | string array | 是 | 过滤值 |
响应结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| count | int | 总数据量 |
入参和响应示例:
入参示例:
{
"appId":"52b64298390f3f180f0c7cff",
"entryId":"553c4406aad3a90877e87c67"
}
响应示例:
{
"count": 2
}
Python插件开发代码示例:
import bmcp
def etl_count(args: Args) -> Output:
params = args.params
params["appId"] = "52b64298390f3f180f0c7cff",
params["formId"] = "553c4406aad3a90877e87c67"
result = bmcp.etl_count(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
7.3 查询视图数据
python调用方法名: bmcp.etl_data
入参结构:
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| appId | string | 是 | 应用id |
| formId | string | 是 | 输出表id |
| fields | string array | 否 | 查询字段,不填查所有 |
| limit | int64 | 否 | 返回条数 |
| skip | int64 | 否 | |
| filter | object | 否 | |
| filter.rel | string | 是 | 筛选组合关系,and或or |
| filter.cond | Object | 是 | 过滤条件列表 |
| filter.cond.field | string | 是 | 字段别名 |
| filter.cond.method | string | 是 | 过滤方法 |
| filter.cond.value | string array | 是 | 过滤值 |
响应结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| count | Number | 符合的数据条数 |
| data | Object Array | 返回数据 |
入参和响应示例:
入参示例:
{
"appId":"52b64298390f3f180f0c7cff",
"entryId":"553c4406aad3a90877e87c67",
"filter":{
"rel":"and",
"cond":[
{
"method":"like",
"field":"单行文本",
"value":["qqq"]
}
]
}
}
响应示例:
{
"count": 1,
"data": [
{
"_id": "6aa222eed1df0082ef0000a1",
"单行文本": "qqqq",
"_widget_1789010599127": {
"_id": "57485153a936aad06de22096",
"mode": "member",
"nickname": "tt002",
"status": 2
},
"_widget_1789010599128": [
{
"_id": "57485153a936aad06de22096",
"mode": "member",
"name": "tt002",
"status": 2
},
{
"_id": "5ae92dc398a45b0cb8c9147c",
"mode": "member",
"name": "测试002测试 哈",
"status": 2
}
],
"_widget_1789010599129": {
"_id": "550606b07bcc60d41cd9b2de",
"mode": "dept",
"nickname": "test001",
"status": 1
},
"_widget_1789010599130": {
"_id": "811247269405fd91a1da8e24",
"mode": "member",
"nickname": "通讯录重构一",
"status": 0
},
"_widget_1789010599131": "2026-08-22T19:37:08Z",
"_widget_1789010599132": "2026-08-22T19:37:08Z",
"_widget_1789010599133": "yyyy",
"_widget_1789010599134": "22",
"_widget_1789010599135": "9f5d4c4e8ff611cf4cdab800"
}
]
}
Python插件开发代码示例:
import bmcp
def etl_data(args: Args) -> Output:
params = args.params
params["appId"] = "52b64298390f3f180f0c7cff"
params["entryId"] = "52d348d08c69a33b793c3adf"
params["filter"] = {
"rel":"and",
"cond":[
{
"method":"like",
"field":"单行文本",
"value":["qqq"]
}
]
}
result = bmcp.etl_data(params)
# 如果必须返回 Output 类型实例,可以强制转换,否则直接返回 dict 也可被接受
return Output(result)
