如何 find/calculate Blue Prism 中的未来时间表

How to find/calculate future schedules in Blue Prism

如何从 Blue Prism 检索 timetable/calendar 未来的时间表(如控制选项卡中所示)?

在 Blue Prism SQL 数据库中,我已经找到了一些表(例如 BPAScheduleBPAScheduleTrigger等)与日程安排有关,但其中 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 分钟安排一次”。

开始和结束日期

对于所有 计划,这些值表示计划有效的日期时间范围。

然后,根据其他参数,从开始日期开始的时间可能表示计划运行的时间。 startdateperiod = 1 时(或者,当 startpoint端点分别为0和83999)。

enddate 当日程设置为永不过期时 NULL

起点和终点

当日程设置为 Hourly / Minutely 时,必须指定当天的开始和结束时间(在 Blue Prism 控制室 中)。 Startpointendpoint 表示这些时间,以秒为单位,从 00:00.

进程 B 的 startpoint25500 秒。这相当于 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?