简体中文
form.render.before
约 1267 字大约 4 分钟
2025-09-22
表单渲染之前触发,此时已经取到对象布局描述数据。
- 将主对象字段组件拦截为插件实现
参数
| 参数 | 说明 | 类型 |
|---|---|---|
| title | 默认标题文案 | Object |
| buttons | 主对象通用按钮, 插件中直接修改buttons数组中的元素{api_name:"",action:"",label:"",onClick:()=>{}} | Array |
| tabs | 顶部导航页签 | Array |
返回结果
| 参数 | 说明 | 类型 |
|---|---|---|
| title | 返回修改后的标题,为空使用默认标题 | String |
| master_field_components | 声明重写的主对象字段组件 | Object |
| detail_field_components | 声明重写的从对象字段组件(表单组件下) | Object |
| layoutFieldDesExt | 扩展主从对象布局字段描述信息先扩展all,再扩展指定业务类型,可同时生效,业务类型配置优先级更高可以改变字段只读必填名称等属性,相当于后台配置的效果,慎改 | Object |
| fixedComponents | 声明插件内实现的弹窗组件,例如自定义的alert组件等 | Array |
| tabsConfig | 配置顶部导航页签相关属性,例如名称,隐藏等 | Object |
| isSkipLayoutFieldStateCheck | 是否跳过设置字段状态时的默认布局校验,例如字段布局只读时,默认不允许动态设置字段为必填 | Boolean |
| beforeUiAction | ui按钮执行前, 拦截或加工UI按钮入参 | Function |
| beforeSaveDraft | 保存草稿执行前, 拦截或加工保存草稿 | Function |
代码示例
修改标题栏的文案
{
event: "form.render.before",
functional: function (pluginExecResult, options) {
return {
title: "插件修改后的标题",//返回修改后的标题,为空使用默认标题
}
}
}重写主对象字段组件
//自定义插件定义
{
event: "form.render.before",
functional: function (pluginExecResult, options) {
return {
master_field_components: {//要重写的主对象字段组件
"testfield": {
resource: "custom_plugin",//必须,固定写死
prop: {//必须,插件字段组件基本属性
pluginInfo: pluginParam.describe,//必须,自定义插件基本信息
comInfo: {//必须,自定义插件字段组件信息
name: "", //(必须)自定义字段组件的名称,根目录config.json文件中components节点中指向对应组件的key
prop: {},//会透传到自定义字段组件customProp属性,格式不限。
renderMode: "value",//自定义字段组件渲染模式,field: 字段整体替换(默认); value: 替换value部分;
}
}
}
}
}
}
}重写从对象字段组件
重写生效范围:1. 从对象平铺模式 2.从对象卡片和表格模式下全部字段编辑(外露字段不受影响)
//自定义插件定义
{
event: "form.render.before",
functional: function (pluginExecResult, options) {
return {
detail_field_components: {//要重写的从对象字段组件
"objApiName":{
"all":{//业务类型:all表示全部业务类型
"testfield": {
resource: "custom_plugin",//必须,固定写死
prop: {//必须,插件字段组件基本属性
pluginInfo: pluginParam.describe,//必须,自定义插件基本信息
comInfo: {//必须,自定义插件字段组件信息
name: "", //(必须)自定义字段组件的名称,根目录config.json文件中components节点中指向对应组件的key
prop: {},//会透传到自定义字段组件customProp属性,格式不限。
renderMode: "value",//自定义字段组件渲染模式,field: 字段整体替换(默认); value: 替换value部分;
}
}
}
}
}
}
}
}
}扩展或修改布局字段描述信息
{
event: "form.render.before",
functional: function (pluginExecResult, options) {
return {
layoutFieldDesExt: {
AccountObj: {//key为要配置的对象apiName
all: {//所有业务类型统一设置(主对象仅在这里设置有效)
"field1__c": {//字段apiName
"is_readonly": true,//只读
"is_required": true,//必填
"label": "自定义字段名称",//字段名称
"disableAutoFocusWhenClick": true,//禁止输入类字段卡片表格模式,点击时自动弹出键盘
"disable_open_history":true,//禁止查找关联字段最近数据
"onLabelClick":()=>{}//点击label触发的函数
"labelRightBtns":[{action:'唯一标识', label:'有icon优先显示icon',icon:'fxui_all中的icon class',style:'', onClick:()=>{}}],//字段名称右侧按钮(仅上下结构时支持)
}
},
"default__c": {////仅设置某个业务类型(从对象有效)
"field1__c": {}
}
}
}
}
}
}插件内实现的弹窗组件
//自定义插件定义
{
event: "form.render.before",
functional: function (pluginExecResult, options) {
return {
fixedComponents: [{
resource: "custom_plugin",//必须,固定写死
prop:{//必须,插件组件基本属性
pluginInfo:pluginParam.describe,//必须,插件基本信息
comInfo:{//必须,插件组件信息
name: "dialog1",//必须,自定义组件的名称,根目录config.json文件中components节点中指向对应组件的key
prop: {test: 1},//自定义组件属性,会透传到自定义组件customProp属性,格式不限
}
}
}]
}
}
}配置顶部导航页签相关属性
{
event: "form.render.before",
functional: function (pluginExecResult, options) {
return {
tabsConfig:{
"api_name": {//页签apiName
label:"",//修改显示名称
hidden:true,//隐藏页签,
}
}
}
}
}拦截或加工保存草稿
{
event: "form.render.before",
functional: function (pluginExecResult, options) {
return {
beforeSaveDraft({draft}) {
return Promise.resolve({draft});
}
}
}
}拦截或加工UI按钮
{
event: "form.render.before",
functional: function (pluginExecResult, options) {
return {
beforeUiAction({button,postData}) {
//button 点击的ui按钮
//postData 默认按钮执行参数
return Promise.resolve({postData});
}
}
}
}注意
- 不适合在这个事件中调用
dataUpdater更新主从数据
