UiPath Orchestrator触发器-Cron表达式用于一个月中的特定日期或下一个工作日(如果不是工作日)



我目前有一个Cron表达式,用于在UiPath Orchestrator中触发进程:

0 0 15 21W*?*

在距离每月21日最近的工作日下午3点运行。

然而,如果21日是非工作日,我需要它在下一个工作日下午3点运行。

试着寻找答案,但没有什么能完全符合摘要。

我使用这个网站来构建我的表达式(这是一个很好的工具(,但它只能选择"最近的一天",而不能选择一个月中特定的下一个工作日:https://www.freeformatter.com/cron-expression-generator-quartz.html

由于您不需要最近的一天,因此无法使用Orchestrator cronjob的功能。我建议创建一个包装程序如下:

  1. 创建一个新进程,称之为StartJobByCheckingDate
  2. 现在创建一个触发器,每天下午3点启动StartJobByCheckingDate
  3. 因此,该流程现在是您所需流程的管理者
  4. 现在我们需要检查是否是21天
  5. 这里有不同的解决方法
    1. 您可以在StartJobByCheckingDate流程中创建一个DataTable甚至file,它包含了您所需流程应该启动的所有不同日期(但这是非常手动的,您可能不想每年都更新它,所以这可能不是最聪明但最简单的解决方案(
    2. 另一个想法是检查当前日期是否为第21天。如果是,请检查是否为周六/周日(非工作日(。
      • 如果true:您现在可以在某个地方创建一个空的伪文件,跟踪21日是非工作日,第二天您检查该文件是否存在,如果存在,则将当前日期检查为工作日,如果是,则再次删除该文件并开始所需的过程
      • 如果false:直接开始您想要的流程

我认为2。那个想法会是最好的。当然,你每年有365个工作机会。但是,当你保持助手进程的智能时,这只需要几秒钟。

另一个想法是使用实体,而不是使用伪文件。更聪明,但需要更多的时间来熟悉。

我们也遇到了完全相同的问题。由于UiPath没有提供开箱即用的可行解决方案,我们将使用以下策略绕过限制:我们每天触发实际作业,考虑到定制的静态NonWorkingDay列表,该列表只会抑制机器人的执行,我们不希望它每天运行

需要以下步骤:

  1. 获取2053年左右之前所有已知银行假日、周六和周日的列表…

  2. 使用这样的脚本构建一个静态排除列表(伪代码。一旦我们真正实现了解决方案,我会更新答案(:

    1. get all valid execution dates
    loop through every 28th of the month until end of 2053
    if the date is in the bankHolidayList then
    loop until the next bankDay is found
    add it to the list of valid ExecutionDates
    else
    add the date to the validExecutionDate-list
    2. build exclusion-list
    loop through every day until end of 2053
    if the date is not in the validExecutionDate-list
    add it to the exclusionDate-list
    
  3. 相应地格式化csv,并将其作为非工作日列表上传给协调器租户

  4. 使用上传的NonWorkDay日历更新您的触发器,使其每天在您想要的时间运行

虽然公认的答案肯定也会起作用,但我们更倾向于采用这种方法,因为让一个单独的机器人只执行UiPath触发器似乎并不合适。使用这种方法,我们没有可能需要维护的额外代码。

在我看来,没有开箱即用的解决方案是缺乏UiPath将(希望(修复到2053年底的功能;-(

干杯

您可以将触发器配置为更频繁地启动,然后在进程的init管理日期,但您必须设置一个列表;holydays";或者以某种方式进行检查。

此外,您还可以使用编排器(+info(的日历选项