Foxtable(狐表)用户栏目专家坐堂 → 有没有办法动态增加计划任务呢?也就是项目发布后,用户可以根据需要自定义设定计划。


  共有2576人关注过本帖树形打印复制链接

主题:有没有办法动态增加计划任务呢?也就是项目发布后,用户可以根据需要自定义设定计划。

帅哥哟,离线,有人找我吗?
cnsjroom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
有没有办法动态增加计划任务呢?也就是项目发布后,用户可以根据需要自定义设定计划。  发帖心情 Post By:2021/4/30 22:51:00 [只看该作者]

有没有办法动态增加计划任务呢?也就是项目发布后,用户可以根据需要自定义设定计划。


计划任务的管理:

首先新增一个全局变量 cishu  默认值为 0

根据需要系统预设20个计划任务,命名为“jihua1jihua2jihua3……,jihua20

每个计划运行的时间均以毫秒进行计算。

如:jihua1代码如下:

If vars("cishu") = 0 Then

    Dim Proc As New Process '定义一个新的Process

    Proc.File = "http://192.168.43.112:8989/jihua.htm" '指定要打开的网页地址

    Proc.Start()

    vars("cishu")=vars("cishu")+1

End If

 

 

Jihua.htm代码为:

Dim d As Date = Date.now

If d.DayOfWeek = 5 Then

    If d.Hour = 22 Then

        If d.Minute= 26 Then

            MessageBox.Show("程序即将进行备份")

vars("cishu")=0

        End If

    End If

End If


项目有一内部函数表   有网页名  代码  网页类型  三个字段

网页名:jihua  (也是函数名)

代码:

Dim d As Date = Date.now

If d.DayOfWeek = 5 Then

    If d.Hour = 22 Then

        If d.Minute= 26 Then

            MessageBox.Show("程序即将进行备份")

vars("cishu")=0

        End If

    End If

End If

网页类型:htm


 回到顶部
帅哥哟,离线,有人找我吗?
有点酸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1093 积分:6682 威望:0 精华:0 注册:2013/7/1 9:05:00
  发帖心情 Post By:2021/5/1 8:33:00 [只看该作者]

实际上只需一个计划就行了,定时循环函数表。

建议函数表增加一个两列:
1、上次执行时间
2、执行间隔


每次循环,比较当前时间和上次执行时间的价格,如果超过执行时间,就开始执行。

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点酸)实际上只需一个计划就行了,定时循环...  发帖心情 Post By:2021/5/1 12:42:00 [只看该作者]

老师  是这个思路么?
以下操作系摸索写法,感觉后续计划执行代码有点繁琐了,老师有没有比较简洁的写法呢?
(比如直接输入执行间隔即可自动计算到期时间  然后检测系统时间是否等于到期时间,如果等于那就运行指定的计划代码,)
(当前难处在于不知道怎么计算选定的执行间隔转化为秒数,比如每周一,每周三,每季度第一天,每月最后一天等,如果不折算并计算到期时间,那就要回到我如下写法,感觉有点繁琐哈!)

已经在函数表里面新增了一个计划逻辑列  初始时间  执行间隔   到期时间(初始时间+执行间隔)
1、在计划管理中写入:(设定2000运行时)
Functions.Execute("计划")
2、然后在函数表里写入 函数名为“计划”数据行
代码如下:
Dim d As Date = Date.today
Dim t As Date = Date.now
Dim FirstDay As Date = New Date(d.year, d.month,1) '第一天
Dim LastDay As Date = New Date(d.year, d.month,Date.DaysInMonth(d.year, d.month)) '最后一天
Dim y As Integer = Date.Today.Year
Dim q As Integer = (Date.Today.Month - 1) \ 3 + 1 '计算现在是第几个季度
Dim dt1 As New Date(y, 3 * (q - 1) + 1, 1) '获取本季度的第一天
Dim dt2 As New Date(y, 3 * q, Date.DaysInMonth(y,3 * q)) '获取本季度的最后一天
output.Show(dt2)

Dim w As Integer = Date.Today.DayOfWeek '算出今天是星期几
Dim w1 As Date = Date.Today.AddDays(-w) '获取本周的第一天
Dim w2 As Date = Date.Today.AddDays(6 - w) '获取本周的最后一天

For Each dr As DataRow In DataTables("内部函数表").DataRows
    If dr("计划")=True Then
        If dr("周期")="每月第一天" Then
            If Date.today=FirstDay And t.Hour="17"  Then
                MessageBox.Show("1")
            End If
        Else If dr("周期")="每月最后一天"  Then
            If Date.today=LastDay And t.Hour="14"  Then
                MessageBox.Show("33")
            End If
        Else If dr("周期")="本季度" Then
            If Date.today=dt2 And t.Hour="17" Then
                MessageBox.Show("333")
            End If
        Else If dr("周期")="每周一" Then
            If w=1 And t.Hour="17" Then
                MessageBox.Show("周一")
            End If
        Else If dr("周期")="每周二" Then
            If w=2 And t.Hour="17"Then
                MessageBox.Show("周二")
            End If
        Else If dr("周期")="每周三" Then
            If w=3 And t.Hour="14"Then
                MessageBox.Show("周三")
            End If
        Else If dr("周期")="每周四" Then
            If w=4 And t.Hour="17"Then
                MessageBox.Show("周四")
            End If
        Else If dr("周期")="每周五" Then
            If w=5 And t.Hour="17"Then
                MessageBox.Show("周五")
            End If
        Else If dr("周期")="每周六" Then
            If w=6 And t.Hour="17"Then
                MessageBox.Show("周六")
            End If
        Else If dr("周期")="每周日" Then
            If w=0 And t.Hour="14"Then
                MessageBox.Show("周日")
            End If
        End If
    End If
Next

3、可根据需要再另外新建一个计划管理窗体,主要用于计划、周期字段值的更改

上述操作后初步可以实现计划字段是true时候,满足条件时弹出对应的提示内容。


[此贴子已经被作者于2021/5/2 14:45:59编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110544 积分:562604 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/5 9:22:00 [只看该作者]

可以再增加一些辅助列,比如逻辑列:是否每月第一天,是否每月最后一天,是否周一,是否周二,...然后根据需要勾选

那么执行的时候,先判断当前日期,如果是每月第一天,那么就查询“是否每月第一天”勾选的行执行,如果是周一,就查询“是否周一”勾选的行执行

 回到顶部