定时器
定时器类必须继承 H3.SmartForm.Timer 类,通过重写 Timer 的 OnWork 方法实现。可以编写多个定时器,同一个企业的多个定时器按触发时间依次执行。
定时器固定每隔 4 小时执行一次,0-4 点区间内会触发一次,4-8 点区间内会触发一次,依此类推。
定时器类可以编写在表单后台代码或列表后台代码中,效果相同。
⚠️ 注意
定时器每一次执行只能执行 10 分钟,超过后会终止执行。
// 定义定时器类(类名格式:自定义功能名 + _Timer),且继承 H3.SmartForm.Timer 类
public class MyTest_Timer: H3.SmartForm.Timer
{
// 构造方法,与类名保持一致,不必书写代码但必须存在
public MyTest_Timer() { }
// 重写定时器引擎执行的方法,必须存在且方法名必须为 OnWork
protected override void OnWork(H3.IEngine engine)
{
// 此方法每隔 4 小时调用一次
Execute_1(engine);
DateTime now = DateTime.Now; // 获取当前时间
DateTime sTime = DateTime.Parse(now.ToString("yyyy-MM-dd 08:00:00")); // 获取当天 8 点
DateTime eTime = DateTime.Parse(now.ToString("yyyy-MM-dd 12:00:00")); // 获取当天 12 点
if(sTime <= now && eTime >= now) // 判断当前时间是否处于 8 点-12 点间
{
// 每天 8 点-12 点间调用 Execute_2 方法(根据定时器执行规则,此区间内必定执行一次)
Execute_2(engine);
}
}
// 封装定时执行的功能代码(非必须),方法名自定义
// 调试方法:在列表后端 OnLoad 方法中书写 new MyTest_Timer().Execute_1(this.Engine)
public void Execute_1(H3.IEngine engine)
{
// 此处无当前表单业务对象,不能使用 this.Request.BizObject,需另行查询业务对象
// 此处无请求对象,需将 this.Request.Engine 替换为 engine
// 此处无当前登录人,需将 this.Request.UserContext.UserId 替换为指定人员 ID 或系统默认用户 ID(H3.Organization.User.SystemUserId)
}
// 封装定时执行的功能代码(非必须),方法名自定义
// 调试方法:在列表后端 OnLoad 方法中书写 new MyTest_Timer().Execute_2(this.Engine)
public void Execute_2(H3.IEngine engine)
{
// 此处无当前表单业务对象,不能使用 this.Request.BizObject,需另行查询业务对象
// 此处无请求对象,需将 this.Request.Engine 替换为 engine
// 此处无当前登录人,需将 this.Request.UserContext.UserId 替换为指定人员 ID 或系统默认用户 ID(H3.Organization.User.SystemUserId)
}
}