跳转至

表单API

表单后端代码可在对应事件中编写逻辑代码实现业务效果。

系统按钮编码

按钮编码 描述
Save 暂存
Submit 提交或同意
Edit 编辑
Print 打印
Copy 复制
Reject 不同意
FinishInstance 结束流程
CancelInstance 作废
RetrieveInstance 撤回
ForBack 回退
Forward 转发

⚠️ 注意
表单后端自定义代码仅在页面执行操作时触发,自动化、业务规则等操作数据时不会触发。

表单 API 模板

public class D00018BFlow: H3.SmartForm.SmartFormController
{
    // 构造方法
    public D00018BFlow(H3.SmartForm.SmartFormRequest request): base(request)
    {
    }

    // 加载表单数据
    protected override void OnLoad(H3.SmartForm.LoadSmartFormResponse response)
    {
        // 在 `base.OnLoad` 之前 `return` 将导致页面空白
        `base.OnLoad(response)`; // 执行加载表单数据
        // `base.OnLoad` 之后可修改 `response` 实现二次开发
    }

    // 执行操作请求
    protected override void OnSubmit(string actionName, H3.SmartForm.SmartFormPostValue postValue, H3.SmartForm.SubmitSmartFormResponse response)
    {
        // 在 `base.OnSubmit` 之前 `return` 将不执行数据库提交
        `base.OnSubmit(actionName, postValue, response)`; // 执行数据库提交
        // `base.OnSubmit` 之后可修改 `response` 实现二次开发
    }

    /// <summary>
    /// 流程实例状态变更(仅流程表单有用)
    /// </summary>
    /// <param name="oldState">改变前状态</param>
    /// <param name="newState">改变后状态</param>
    protected virtual void OnWorkflowInstanceStateChanged(H3.Workflow.Instance.WorkflowInstanceState oldState, H3.Workflow.Instance.WorkflowInstanceState newState)
    {
        if (newState == WorkflowInstanceState.Running)
        {
            // 还是处于运行状态
        }
        else if (newState == WorkflowInstanceState.Finished)
        {
            // 流程实例已结束
        }
        else if (newState == WorkflowInstanceState.Canceled)
        {
            // 流程实例已取消
        }
    }
}

接口列表

构造方法

功能描述

构造方法可用于构造对象实例等操作。

接口定义

protected SmartFormController(SmartFormRequest request)

参数

参数名称 是否必填 类型 描述
request H3.SmartForm.SmartFormRequest 上下文环境参数,用于获取工作流服务及表单数据

返回值

无返回值。

示例

public class D00018BFlow: H3.SmartForm.SmartFormController
{
   private readonly TestInstance instance = null;
    // 构造方法
    public D00018BFlow(H3.SmartForm.SmartFormRequest request): base(request)
    {
      // 实例化对象
      instance = new TestInstance(this.Engine);
    }

    protected override void OnLoad(H3.SmartForm.LoadSmartFormResponse response)
    {
        base.OnLoad(response);
    }

    protected override void OnSubmit(string actionName, H3.SmartForm.SmartFormPostValue postValue, H3.SmartForm.SubmitSmartFormResponse response)
    {
        base.OnSubmit(actionName, postValue, response); 
    }

    protected override void OnWorkflowInstanceStateChanged(H3.Workflow.Instance.WorkflowInstanceState oldState, H3.Workflow.Instance.WorkflowInstanceState newState)
    {
        base.OnWorkflowInstanceStateChanged(oldState, newState);
    }
}

加载表单数据事件

功能描述

加载表单数据事件可用于控制返回前端的数据,包括:

  • 控制数据返回
  • 修改前端按钮
  • 修改字段属性(可见性/可写性/必填性)
  • 按权限返回差异化数据

接口定义

protected override void OnLoad(H3.SmartForm.LoadSmartFormResponse response);

参数

参数名称 是否必填 类型 描述
response H3.SmartForm.LoadSmartFormResponse 返回值对象

返回值

无返回值,通过 response 参数返回数据。

示例

public class D00018BFlow: H3.SmartForm.SmartFormController
{
    public D00018BFlow(H3.SmartForm.SmartFormRequest request): base(request)
    {
    }

    protected override void OnLoad(H3.SmartForm.LoadSmartFormResponse response)
    {
        if(this.Request.UserContext.User.Name == "不可看用户")
        {
            return; // 返回空白页面
        }
        base.OnLoad(response);
        // 按钮控制
        response.Actions.Remove("Remove");  // 移除删除按钮
        Dictionary<string, H3.SmartForm.ViewAction> newActions = new Dictionary<string, H3.SmartForm.ViewAction>();
        foreach(string action in response.Actions.Keys)
        {
            if(action == "Submit")
            {
              response.Actions[action].Text = "OK"; // 修改按钮名称
            }
            newActions.Add(action, response.Actions[action]);
        }
        // 添加新按钮
        newActions.Add("Refreshthereconciliationdetails", new H3.SmartForm.ViewAction("Refreshthereconciliationdetails", "刷新对账明细", ""));
        response.Actions = newActions; 

        // 修改主表字段属性
        response.ReturnData["F0000002"].Visible = false; // 设置不可见
        response.ReturnData["F0000002"].Editable = false; // 设置不可写
        response.ReturnData["F0000002"].Required = false; // 设置不必填
        response.ReturnData["F0000002"].Value = "修改后的值"; // 修改展示数据
        // 修改子表字段属性
        Dictionary<string, object> subtableValuesMap = response.ReturnData["D000217663a3d19e34b4ae2a139cc9dcc98506b"].Value as Dictionary<string, object>;
          List<Dictionary<string, H3.SmartForm.SmartFormResponseDataItem>> subDataItems = subtableValuesMap["R"] as List<Dictionary<string, H3.SmartForm.SmartFormResponseDataItem>>;
          if(subDataItems != null)
          {
              foreach(Dictionary<string, H3.SmartForm.SmartFormResponseDataItem> subRow in subDataItems)
              {
                  // 设置子表字段不可见
                  subRow["D000217663a3d19e34b4ae2a139cc9dcc98506b.F0000002"].Visible = false;
              }
          }
    }
}

执行操作请求事件

功能描述

执行操作请求事件可用于控制数据提交、添加自定义逻辑等操作,包括:

  • 提交前数据校验
  • 数据二次转换
  • 实现前后端交互
  • 控制页面刷新行为

接口定义

protected override void OnSubmit(string actionName, 
                                 H3.SmartForm.SmartFormPostValue postValue, 
                                 H3.SmartForm.SubmitSmartFormResponse response)

参数

参数名称 是否必填 类型 描述
actionName string 操作/按钮编码
postValue string 前端传递内容
response H3.SmartForm.SubmitSmartFormResponse 返回值对象

返回值

无返回值,通过 response 参数返回数据。

示例

public class D00018BFlow: H3.SmartForm.SmartFormController
{
    public D00018BFlow(H3.SmartForm.SmartFormRequest request): base(request)
    {
    }

    protected override void OnSubmit(string actionName, H3.SmartForm.SmartFormPostValue postValue, H3.SmartForm.SubmitSmartFormResponse response)
    {
        // 数据校验
        string fValue = this.Request.BizObject["F0000002"] + string.Empty;
        if(string.IsNullOrEmpty(fValue))
        {
            throw new H3Exception("请输入字段 `F0000002` 的值");
        }
        /*流程节点判断*/
        //actionName == Reject 不同意
        //actionName == Submit 提交/同意
        if(this.Request.ActivityCode == "指定环节的ActivityCode")
        {
            // 执行具体逻辑
        }
        // 自定义请求
        if(actionName == "GetCurrentContext")
        {
            if(response.ReturnData == null)
            {
                response.ReturnData = new Dictionary<string, object>();
            }
            response.ReturnData.Add("currentTime", DateTime.Now.ToString("yyyyy-MM-dd HH:mm:ss"));
            response.ReturnData.Add("currentUserId", this.Request.UserContext.UserId);
            response.ReturnData.Add("currentUserName", this.Request.UserContext.User.Name);
            return;
        }
        base.OnSubmit(actionName, postValue, response); 
        response.ClosePage = false; // 不关闭窗口
        response.Refresh = false; // 不刷新页面
    }
}

流程实例状态变更事件

功能描述

流程实例状态变更时(如结束或重新激活),可在该事件中编写业务逻辑。

接口定义

protected override void OnWorkflowInstanceStateChanged(H3.Workflow.Instance.WorkflowInstanceState oldState, 
                                                       H3.Workflow.Instance.WorkflowInstanceState newState)

参数

参数名称 是否必填 类型 描述
oldState H3.Workflow.Instance.WorkflowInstanceState 变更前状态
newState H3.Workflow.Instance.WorkflowInstanceState 变更后状态

返回值

无返回值。

示例

public class D00018BFlow: H3.SmartForm.SmartFormController
{
    public D00018BFlow(H3.SmartForm.SmartFormRequest request): base(request)
    {
    }

    /// <summary>
    /// 流程实例状态变更(仅流程表单有用)
    /// </summary>
    /// <param name="oldState">改变前状态</param>
    /// <param name="newState">改变后状态</param>
    protected override void OnWorkflowInstanceStateChanged(H3.Workflow.Instance.WorkflowInstanceState oldState, H3.Workflow.Instance.WorkflowInstanceState newState)
    {
        if(oldState == H3.Workflow.Instance.WorkflowInstanceState.Running && newState == H3.Workflow.Instance.WorkflowInstanceState.Finished)
        {
            // 编写流程生效时逻辑
        }
        else if(oldState == H3.Workflow.Instance.WorkflowInstanceState.Finished && newState == H3.Workflow.Instance.WorkflowInstanceState.Running)
        {
            // 编写流程重新激活时逻辑
        }
        base.OnWorkflowInstanceStateChanged(oldState, newState);
    }
}