/**
 * 获取用户数据
 * -
 * ppExt 氚云组织架构只有全量查询接口, 且部门和用户ID, 有单独ID. 更甚接口未返回钉钉userId与手机号登信息
 * 1. todo: 后续考虑新建氚云webservice进行查询
 * 2. 临时方案为, H_User系统表, 字段DingTalkAccount「返回格式为 userId.corpId」, 通过氚云定时任务储存与钉钉对照关系 [详见 test/sample/CPTimer]
 */

//定义一个定时器类(类名格式：自定义功能名 + _Timer)，且继承H3.SmartForm.Timer类
public class CPTimer: H3.SmartForm.Timer
{
    //构造方法，跟类名保持一致，里面不必书写代码，但是必须存在
    public CPTimer() { }

    //重写定时器引擎执行的方法，必须存在，且方法名必须为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 00:00:00"));//获取今天的10点
        DateTime eTime = DateTime.Parse(now.ToString("yyyy-MM-dd 04:00:00"));//获取今天的14点

        if(sTime <= now && eTime >= now)//判断当前时间是否处于10点-14点间
        {
            //每天0点-4点间调用一次Execute_2方法（根据氚云定时器每隔4小时执行一次的规则，0点-4点间隔4小时，所以这个范围内必定会执行一次）
            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）

    }

    ///  临时方案为, H_User系统表, 字段DingTalkAccount「返回格式为 userId.corpId」, 通过氚云定时任务储存与钉钉对照关系
    public void Execute_2(H3.IEngine engine)
    {
        // 清除表单数据
        engine.BizObjectManager.Clear("D1489118960387db0274aa18b9168cde213c3d3");
        // 任务处理同步
        System.Data.DataTable dtAccount = engine.Query.QueryTable("select * from  H_User", null);
        if(dtAccount != null && dtAccount.Rows != null && dtAccount.Rows.Count > 0)
        {
            foreach(System.Data.DataRow row in dtAccount.Rows)
            {
                // DingTalkAccount「返回格式为 userId.corpId」
                string userId = row["DingTalkAccount"] + string.Empty;
                string dUserId = userId.Split('.')[0];
                string cUserId = row["ObjectId"] + string.Empty;
                string userName = row["Name"] + string.Empty;
                engine.Query.QueryTable(string.Format("insert into i_D1489118960387db0274aa18b9168cde213c3d3 (F0000001, F0000002, F0000003, ObjectId) values ('{0}', '{1}', '{2}', '{3}')", userName, cUserId, dUserId, cUserId), null);
            }
        }
    }

}

