想要正确使用百数功能模块,我们首先需要知道功能模块是如何和表单界面进行交互的;
百数功能模块体系是通过表单前端操作来驱动模块,达到自己想要的业务目的。
下面我们先介绍一下formeventlib功能模块:
字段触发(_formeventlib ) :当用户操作某个字段的时候触发;
表单字段-模块触发事件: 此事件会在我们对事件表单的字段进行操作时触发(例如:单行文本失去焦点, 下拉框选择一个选项时; 注意需要对此字段设置一个模块),通过此功能,可以自由扩展其他功能(例如:点击按钮请求第三方web-api), 此事件触发有3个必要的条件:
①、字段必须设置一个模块(所有字段默认为失去焦点即触发后端模块事件代码)。
②、表单的字段需要配置模块信息。
③、当光标与字段出现交互时, 例如: 编辑完字段内容失去输入焦点,或者是更改下拉框、单选框、复选框选项时,就会触发此事件。
事件触发流程:触发事件后,前端页面会将 “当前模块配置信息”, “当前表单别名”,“触发事件的字段信息”, “表单字段数据信息”, “预留参数” 传给后端对应的模块中的"_formeventlib"函数,然后执行"后端模块代码"后返回"返回结果",“需要界面展示的数据"和"需要界面弹出的提示”。
百数功能函数原型
def _formeventlib(config, formAlias, widgetValue, entryValue, info, other):
参数
config [数组型] :
模块当前配置中的字段信息
formAlias [字符型]:
表单别名
widgetValue [数组]:
触发事件的字段信息
entryValue [数组] :
表单里字段的数据信息, 通过修改并返回这个值的json字符串可以修改表单的字段属性
info [数组型] :
操作此表的userid信息和客户端ip等信息
other [数组型] :
附加信息,暂时只有前面模块的所有结果集信息,没有的话为空数组
参数详解
config的数据格式:
{
"模块执行动作": {
"type": "triggeraction",
"actions": [
{
"target": {
"entryId": "test"
},
"type": "insert_data",
"values": [
{
"type": "text",
"mode": "depend",
"depend": {
"field": {
"name": "单行文本",
"type": "text"
}
},
"field": {
"name": "单行文本",
"type": "text"
}
}
],
"filter": {
"rel": "and",
"cond": {}
}
}
],
"source_form": "test"
},
"模块单行文本": "11",
"模块多行文本": "22"
}
模块单行文本/多行文本/执行动作:模块配置界面的字段信息, 具体详情请点击 模块增强字段说明
widgetValue 的数据格式:
子表单外的字段触发事件时的格式:
{
"data" : "456",
"widgetNameAlias" : "多行文本",
"widgetType" : "textarea"
}
子表单里的字段触发事件时的格式:
{
"data" : "456",
"widgetNameAlias" : "多行文本",
"widgetType" : "textarea",
"index" : 0,
"subformNameAlias" : "子表单"
}
子表单字段导入数据触发事件时的格式:
{
"widgetType": "subform",
"widgetNameAlias": "子表单",
"data": [
{
"数字": {
"widgetType": "number",
"visible": True,
"data": 15
},
"单行文本": {
"widgetType": "text",
"visible": True,
"data": "张三"
}
},
{
"数字": {
"widgetType": "number",
"visible": True,
"data": 16
},
"单行文本": {
"widgetType": "text",
"visible": True,
"data": "李四"
}
}
],
"triggerType": "import"
}
data: 字段的值
widgetNameAlias: 字段的别名
widgetType: 字段的类型
triggerType: 触发类型:import表示导入数据(仅子表单导入数据时才存在)
index: 当前数据在子表单里的索引行数, 从0开始(仅子表单里的字段触发事件才存在)
subformNameAlias: 子表单名称(仅子表单里的字段触发事件才存在)
entryValue 的数据格式:
{
"单行文本": {
"visible": True,
"data": "123",
"widgetType": "text"
},
"多行文本": {
"visible": True,
"data": "456",
"widgetType": "textarea"
},
"单选按钮组": {
"items": [
{
"value": "我的选项1"
},
{
"value": "我的选项2"
},
{
"value": "我的选项3"
}
],
"visible": True,
"data": "我的选项1",
"widgetType": "radiogroup"
},
"子表单": {
"visible": True,
"data": [
{
"多行文本2": {
"data": "22",
"visible": True,
"widgetType": "textarea"
},
"单行文本2": {
"data": "11",
"visible": True,
"widgetType": "text"
}
}
],
"widgetType": "subform"
}
}
data: 字段的值
visible: 是否可见, True表示可见, False表示隐藏
widgetType: 字段的类型
items: 单选按钮组, 复选框组, 下拉框, 下拉复选框 专有的表示所有选项
(修改字段的数据请参照下面的示例, 目前只支持四种字段属性, 格式同 _forminitiallib)
更多的数据格式介绍,见文档:https://doc.baibaoyun.com/detailed/909916。
info 的数据格式:
下面展示一些
{
"operator":"55cb7d57f7a190e382857117",
"clientIp":"175.8.178.125"
}
operator:当前操作人的userid
clientIp:客户端ip
other的数据格式:
{
"libResult": [
{
"result": True,
"text": "模块1的数据",
"name": "测试模块",
"datas": {
"单行文本": {
"data": "单行文本的数据"
},
"多行文本": {
"data": "多行文本的数据"
}
}
},
{
"result": True,
"text": "模块2的数据",
"name": "测试模块",
"datas": {
"单行文本": {
"data": "单行文本的数据"
},
"多行文本": {
"data": "多行文本的数据"
}
}
}
]
}
libResult:前面模块的结果集信息,有几个模块就有几个子数组
result: 模块的逻辑型返回值
datas: 模块的数组型返回值
text: 模块的文本型返回值
name: 模块的名称
返回值
返回值接受多个返回值。
第一个返回值是Boolean(逻辑型),返回结果True(真)或False(假)。
第二个返回值是Json字符串(可选),返回给界面字段赋值。
第三个返回值是字符串(可选),返回给页面弹出提示。
(如果没有返回值时第一个返回值默认为True(真),第二/三个返回值默认为空)
事件触发示意图:
备注
widgetValue/entryValue 的数值是数组类型,因此大家可以通过数组的形式操作它。
formeventlib事件可以解决很多我们前端字段做不到的事情,例如:
根据界面需求动态计算取值;
根据用户输入的值动态改变字段的显示和隐藏;
接入第三方API获取数据 。