如何 find/calculate Blue Prism 中的未来时间表
How to find/calculate future schedules in Blue Prism
如何从 Blue Prism 检索 timetable/calendar 未来的时间表(如控制选项卡中所示)?
在 Blue Prism SQL 数据库中,我已经找到了一些表(例如 BPASchedule 和 BPAScheduleTrigger等)与日程安排有关,但其中 none 似乎包含有关未来 timetable/calendar 事件的信息。这些信息存储在任何地方吗?如果没有,我如何使用可用数据以编程方式重建时间表?
Blue Prism 数据库仅存储每个计划的重复模式数据;它不存储时间 table 本身 — 相反,它会即时计算时间 table。
以下SQL查询returns所有数据我们需要以编程方式重构蓝色棱镜时间table 我们自己:
SELECT bpaschedule.name,
period,
unittype AS periodunit,
startdate,
enddate,
startpoint,
endpoint,
COALESCE(workingweek, dayset) AS dayset
FROM bpascheduletrigger
LEFT JOIN bpaschedule ON ( bpascheduletrigger.scheduleid = bpaschedule.id )
LEFT JOIN bpacalendar ON bpacalendar.id = calendarid
WHERE retired = 0
AND bpaschedule.NAME IS NOT NULL
AND ( enddate > Getdate() OR enddate IS NULL )
AND ( ( unittype = 0 AND startdate > Getdate() ) OR unittype != 0 )
ORDER BY scheduleid
(此查询仅检索将来至少会出现一次的活动计划)。
示例输出
name
period
periodunit
startdate
enddate
startpoint
endpoint
dayset
Process A
10
6
2019-03-08 23:00:00.000
NULL
30600
66000
4
Process B
10
6
2019-04-11 07:15:00.000
NULL
25500
29700
62
Process C
1
2
2020-07-22 15:59:00.000
NULL
0
86399
62
Process D
1
3
2020-05-08 16:50:00.000
2021-06-06 14:20:00.000
0
86399
32
Process E
1
3
2020-04-06 08:00:00.000
NULL
0
86399
2
Process F
1
3
2020-04-07 06:45:00.000
NULL
0
86399
4
许多列的含义相当不透明,所以让我们剖析它们...
期间
period 列表示相关周期单位中的周期时间。
周期单位取七个值之一,如下:
0 = Once
1 = Hour
2 = Day
3 = Week
4 = Month
5 = Year
6 = Minute
A period of 17 and a periodunit of 6 因此意味着“每 17 分钟安排一次”。
开始和结束日期
对于所有 计划,这些值表示计划有效的日期时间范围。
然后,根据其他参数,从开始日期开始的时间可能表示计划运行的时间。 startdate 当 period = 1 时(或者,当 startpoint 和 端点分别为0和83999)。
enddate 当日程设置为永不过期时 NULL
。
起点和终点
当日程设置为 Hourly / Minutely
时,必须指定当天的开始和结束时间(在 Blue Prism 控制室 中)。 Startpoint 和 endpoint 表示这些时间,以秒为单位,从 00:00.
进程 B 的 startpoint 为 25500 秒。这相当于 7 小时 4 分 59 秒——换句话说,该过程首先在 07:04:59AM.
开始
日集
Dayset 表示 bitset 的整数值,其中每个位对应星期几:
None = 0
Sun = 1
Mon = 2
Tue = 4
Wed = 8
Thu = 16
Fri = 32
Sat = 64
62 天(如 table)因此对应于周一至周五(Mon | Tue | Wed | Thu | Fri
的按位或的整数值);周一和周四的时间表 运行 的日期集仅为 18 (2+16)。
将所有这些放在一起,自然语言中的第 1 行等同于:
Process A runs every 10 minutes between 08:30:00 and 18:20:00 on Tuesdays indefinitely (no end date).
...最后一行等于:
Process E runs every week on Friday, at 8AM indefinitely.
现在由您将此处讨论的逻辑转换为代码,将 Blue Prism 计划条目从 SQL 查询转换为可编程查询的重复(日历)事件。考虑使用执行 递归计算的库 ;这样的库应该可以轻松回答以下问题:
When does this schedule next run?
Which schedules run between date1 and date2?
如何从 Blue Prism 检索 timetable/calendar 未来的时间表(如控制选项卡中所示)?
在 Blue Prism SQL 数据库中,我已经找到了一些表(例如 BPASchedule 和 BPAScheduleTrigger等)与日程安排有关,但其中 none 似乎包含有关未来 timetable/calendar 事件的信息。这些信息存储在任何地方吗?如果没有,我如何使用可用数据以编程方式重建时间表?
Blue Prism 数据库仅存储每个计划的重复模式数据;它不存储时间 table 本身 — 相反,它会即时计算时间 table。
以下SQL查询returns所有数据我们需要以编程方式重构蓝色棱镜时间table 我们自己:
SELECT bpaschedule.name,
period,
unittype AS periodunit,
startdate,
enddate,
startpoint,
endpoint,
COALESCE(workingweek, dayset) AS dayset
FROM bpascheduletrigger
LEFT JOIN bpaschedule ON ( bpascheduletrigger.scheduleid = bpaschedule.id )
LEFT JOIN bpacalendar ON bpacalendar.id = calendarid
WHERE retired = 0
AND bpaschedule.NAME IS NOT NULL
AND ( enddate > Getdate() OR enddate IS NULL )
AND ( ( unittype = 0 AND startdate > Getdate() ) OR unittype != 0 )
ORDER BY scheduleid
(此查询仅检索将来至少会出现一次的活动计划)。
示例输出
name | period | periodunit | startdate | enddate | startpoint | endpoint | dayset |
---|---|---|---|---|---|---|---|
Process A | 10 | 6 | 2019-03-08 23:00:00.000 | NULL | 30600 | 66000 | 4 |
Process B | 10 | 6 | 2019-04-11 07:15:00.000 | NULL | 25500 | 29700 | 62 |
Process C | 1 | 2 | 2020-07-22 15:59:00.000 | NULL | 0 | 86399 | 62 |
Process D | 1 | 3 | 2020-05-08 16:50:00.000 | 2021-06-06 14:20:00.000 | 0 | 86399 | 32 |
Process E | 1 | 3 | 2020-04-06 08:00:00.000 | NULL | 0 | 86399 | 2 |
Process F | 1 | 3 | 2020-04-07 06:45:00.000 | NULL | 0 | 86399 | 4 |
许多列的含义相当不透明,所以让我们剖析它们...
期间
period 列表示相关周期单位中的周期时间。
周期单位取七个值之一,如下:
0 = Once
1 = Hour
2 = Day
3 = Week
4 = Month
5 = Year
6 = Minute
A period of 17 and a periodunit of 6 因此意味着“每 17 分钟安排一次”。
开始和结束日期
对于所有 计划,这些值表示计划有效的日期时间范围。
然后,根据其他参数,从开始日期开始的时间可能表示计划运行的时间。 startdate 当 period = 1 时(或者,当 startpoint 和 端点分别为0和83999)。
enddate 当日程设置为永不过期时 NULL
。
起点和终点
当日程设置为 Hourly / Minutely
时,必须指定当天的开始和结束时间(在 Blue Prism 控制室 中)。 Startpoint 和 endpoint 表示这些时间,以秒为单位,从 00:00.
进程 B 的 startpoint 为 25500 秒。这相当于 7 小时 4 分 59 秒——换句话说,该过程首先在 07:04:59AM.
开始日集
Dayset 表示 bitset 的整数值,其中每个位对应星期几:
None = 0
Sun = 1
Mon = 2
Tue = 4
Wed = 8
Thu = 16
Fri = 32
Sat = 64
62 天(如 table)因此对应于周一至周五(Mon | Tue | Wed | Thu | Fri
的按位或的整数值);周一和周四的时间表 运行 的日期集仅为 18 (2+16)。
将所有这些放在一起,自然语言中的第 1 行等同于:
Process A runs every 10 minutes between 08:30:00 and 18:20:00 on Tuesdays indefinitely (no end date).
...最后一行等于:
Process E runs every week on Friday, at 8AM indefinitely.
现在由您将此处讨论的逻辑转换为代码,将 Blue Prism 计划条目从 SQL 查询转换为可编程查询的重复(日历)事件。考虑使用执行 递归计算的库 ;这样的库应该可以轻松回答以下问题:
When does this schedule next run?
Which schedules run between date1 and date2?