跳转至

表单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
);