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