CPTimer.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /**
  2. * 获取用户数据
  3. * -
  4. * ppExt 氚云组织架构只有全量查询接口, 且部门和用户ID, 有单独ID. 更甚接口未返回钉钉userId与手机号登信息
  5. * 1. todo: 后续考虑新建氚云webservice进行查询
  6. * 2. 临时方案为, H_User系统表, 字段DingTalkAccount「返回格式为 userId.corpId」, 通过氚云定时任务储存与钉钉对照关系 [详见 test/sample/CPTimer]
  7. */
  8. //定义一个定时器类(类名格式:自定义功能名 + _Timer),且继承H3.SmartForm.Timer类
  9. public class CPTimer: H3.SmartForm.Timer
  10. {
  11. //构造方法,跟类名保持一致,里面不必书写代码,但是必须存在
  12. public CPTimer() { }
  13. //重写定时器引擎执行的方法,必须存在,且方法名必须为OnWork
  14. protected override void OnWork(H3.IEngine engine)
  15. {
  16. //此方法每隔4小时调用一次
  17. Execute_1(engine);
  18. DateTime now = DateTime.Now;//获取当前时间
  19. DateTime sTime = DateTime.Parse(now.ToString("yyyy-MM-dd 00:00:00"));//获取今天的10点
  20. DateTime eTime = DateTime.Parse(now.ToString("yyyy-MM-dd 04:00:00"));//获取今天的14点
  21. if(sTime <= now && eTime >= now)//判断当前时间是否处于10点-14点间
  22. {
  23. //每天0点-4点间调用一次Execute_2方法(根据氚云定时器每隔4小时执行一次的规则,0点-4点间隔4小时,所以这个范围内必定会执行一次)
  24. Execute_2(engine);
  25. }
  26. }
  27. //此方法内书写你要定时执行的功能代码,非必须存在,只是为了封装,方法名自定义
  28. //调试本方法:在列表后端OnLoad方法中书写:new MyTest_Timer().Execute_1(this.Engine)
  29. public void Execute_1(H3.IEngine engine)
  30. {
  31. //此处无当前表单业务对象,所以不能使用this.Request.BizObject,请另行查询出需要的业务对象
  32. //此处无请求对象,所以请将this.Request.Engine替换为engine
  33. //此处无当前登录人,所以请将this.Request.UserContext.UserId替换为指定的人员id或系统默认用户Id(即:H3.Organization.User.SystemUserId)
  34. }
  35. /// 临时方案为, H_User系统表, 字段DingTalkAccount「返回格式为 userId.corpId」, 通过氚云定时任务储存与钉钉对照关系
  36. public void Execute_2(H3.IEngine engine)
  37. {
  38. // 清除表单数据
  39. engine.BizObjectManager.Clear("D1489118960387db0274aa18b9168cde213c3d3");
  40. // 任务处理同步
  41. System.Data.DataTable dtAccount = engine.Query.QueryTable("select * from H_User", null);
  42. if(dtAccount != null && dtAccount.Rows != null && dtAccount.Rows.Count > 0)
  43. {
  44. foreach(System.Data.DataRow row in dtAccount.Rows)
  45. {
  46. // DingTalkAccount「返回格式为 userId.corpId」
  47. string userId = row["DingTalkAccount"] + string.Empty;
  48. string dUserId = userId.Split('.')[0];
  49. string cUserId = row["ObjectId"] + string.Empty;
  50. string userName = row["Name"] + string.Empty;
  51. engine.Query.QueryTable(string.Format("insert into i_D1489118960387db0274aa18b9168cde213c3d3 (F0000001, F0000002, F0000003, ObjectId) values ('{0}', '{1}', '{2}', '{3}')", userName, cUserId, dUserId, cUserId), null);
  52. }
  53. }
  54. }
  55. }