表单API
环境参数
通过 $.SmartForm.ResponseContext 可获取当前表单数据的环境参数,环境参数说明如下:
| 属性名称 | 说明 |
|---|---|
| Actions | 表单按钮集合 按钮数据结构定义详见 H3.SmartForm.ViewAction |
| ActivityCode | 流程环节 Code |
| DisplayName | 表单名称 |
| FormDataType | 表单数据类型 |
| FormMode | 表单模式 0:编辑模式;1:只读模式;2:发起流程;4:查看模式 |
| InstanceId | 流程实例 ID |
| IsCreateMode | 是否创建模式 |
| Errors | 返回的错误信息 |
| Message | 返回的其他信息 |
| Originator | 发起人用户 ID |
| OriginatorCode | 发起人用户名 |
| OriginatorPatentId | 发起人所在部门 ID |
| BizObjectId | 当前对象 ID |
| BizObjectStatus | 当前对象状态 0:草稿;1:生效;2:运行中;3:已取消 |
| ReturnData | 返回自定义数据项的定义与值的集合 |
| SchemaCode | 当前表单编码 |
| Successful | 当前请求是否成功 |
| WorkItemId | 当前流程工作项 ID |
| WorkItemType | 当前流程工作项类型 0:普通工作项;2:审批类型工作项;3:传阅类型工作项 |
| WorkflowVersion | 当前流程模板的版本号 |
使用示例:
// 加载事件
OnLoad:function(){
// 读取当前所在的流程节点(非流程表单则为空)
const activityCode = $.SmartForm.ResponseContext.ActivityCode;
// 表单模式:0(编辑模式);1(只读模式);2(发起流程);4(查看模式)
const formMode = $.SmartForm.ResponseContext.FormMode;
if(formMode == 2){
//当前为发起流程(新增数据)模式
}
},
加载完成事件
表单加载完成时触发。
可在此处给控件绑定 BindChange 事件,修改特定控件的颜色或字体大小等。
// 加载事件
OnLoad:function(){
//表单加载完成后,执行初始化动作,根据业务需求编写
if( $.SmartForm.ResponseContext.BizObjectStatus != 1 && $.SmartForm.ResponseContext.BizObjectStatus != 3 ) {
var child = this.D000261ProductionDetails.GetValue();
for( var i = 0;i < child.length;i++ ) {
if( child[ i ].BOMIDStr != "" ) { continue; }
this.D000261ProductionDetails.UpdateRow( child[ i ].ObjectId, {
"D000261ProductionDetails.ProductionMaterialsID": child[ i ].ProductionMaterialsID
});
}
}
},
按钮加载完成事件
加载表单按钮时触发,可修改按钮的显示名称。
// 按钮事件
OnLoadActions:function(actions){
for(const item of actions) {
item.Text = "AAA"; // 修改按钮显示名称
}
},
提交校验事件
表单提交前触发,return true 表示验证通过;return false 表示验证不通过并终止当前请求。
暂存操作不会触发该事件。
// 提交校验
OnValidate:function(actionControl // 按钮对象,通过 actionControl.DoAction() 可重新执行请求
){
var AccountNameManager = this.AccountName; // 获取控件
if(AccountNameManager == null || accountName == undefined) { // 判断控件是否存在
return true;
}
var accountName = AccountNameManager.GetValue(); // 获取控件值
if(accountName == "") {
return false; // 未填写值,终止请求
}
return true;
},
提交前事件
表单执行后端请求前触发。
return true 表示继续执行;return false 表示终止当前请求。
// 提交前事件
BeforeSubmit:function(action, // 按钮编码
postValue // 提交数据(key-value 格式)
) {
var parent = this;
if(action == "Save" || action == "Submit") {
var salesPackagesControlManager = parent.D287672SalesPackages;
var salesOrderDetailsControlManager = parent.D287672SalesOrderDetails;
// 1. 读取套餐 ID 集合
var salesPackages = salesPackagesControlManager.GetValue();
// 2. 读取销售产品明细中的套餐 ID 集合
var salesOrderDetails = salesOrderDetailsControlManager.GetValue();
// 提取 SalesPackageId 并形成集合
const salesPackageIds = new Set(salesPackages.map(sp => sp.SalesPackageId));
const salesOrderDetailIds = new Set(salesOrderDetails.map(sod => sod.BelongingToPackage));
// 比较集合是否相同
const areSetsEqual = (setA, setB) => {
if (setA.size !== setB.size) return false;
for (const item of setA) {
if (!setB.has(item)) return false;
}
return true;
};
var equalResult = areSetsEqual(salesPackageIds, salesOrderDetailIds);
if(!equalResult) {
$.IShowWarn("请刷新套餐明细");
return false;
}
}
},
提交后事件
表单请求后端接口后触发。
可在此根据接口返回值执行操作,例如为控件赋值。
// 提交后事件
AfterSubmit:function(action, // 按钮编码
responseValue // 后台返回数据
) {
if(action == "RefreshPackageDetails") {
if(responseValue.Errors && responseValue.Errors.length > 0) {
$.IShowError(responseValue.Errors[0]);
}
}
}
//-----responseValue 结构示例-----//
{
"InstanceId": null,
"InstanceName": "",
"WorkItemId": null,
"Url": null,
"BizObjectId": "1c589b7e-a248-428e-912c-59098e6e81de",
"NodeType": 200,
"ClosePage": true,
"Refresh": true,
"ReturnData": null, // 后台返回的业务数据
"Successful": true, // false 表示存在错误
"Message": "",
"Infos": [],
"Errors": [], //错误信息, Successful为false时
"ExternalFormUrl": null,
"ActionName": "Save",
"IsMobile": false,
"IsExternalForm": false,
"IsExternalShare": false,
"IsOpenQuery": false,
"CorpId": "dingc4757b69e3af8898f5bf40eda33b7ba0"
}
关闭表单
在前端通过代码主动关闭表单。
//旧版表单
$.SmartForm.ClosePage();
//表单3.0
this.ClosePage();
刷新列表
在前端通过代码主动刷新列表,如果表单自定义按钮修改了数据,可以调用此方法刷新列表数据。
$.IRefreshView();
执行后端请求
前端调用后端自定义接口获取数据,返回数据可用于条件判断或控件赋值。
后端逻辑需写在 OnSubmit 方法中,通过 actionName 参数确定前端调用的方法,使用 $.SmartForm.PostForm 调用。
// 接口定义
$.SmartForm.PostForm(
actionName, // 提交的 ActionName
data, // 提交数据(JSON 格式)
callBack, // 成功回调函数
errorBack, // 失败回调函数
async // 是否异步(默认同步)
);
// 调用示例
$.SmartForm.PostForm(
"actionCode",
{"param1":"value1"},
function(data) {
console.log(data);
},
function(errorData) {
console.log(errorData);
},
true
);