使用软件包 SDK 创建触发器
使用 Automation 360 时,您可以使用 SDK 软件包创建触发器。
使用触发器
使用 Automation 360 创建触发器。触发器在满足特定条件时启动 bot 并等待条件改变或停止。当触发器的条件匹配时,将调用运行方法向触发器发出信号。
所需注释
要创建触发器,需要以下注释:
注释 | 使用 |
---|---|
BotCommand |
使用 BotCommand 注释,trigger 作为 commandType 。这确保了普通 Java 对象 (POJO)适合于使用 Automation 360 创建触发器。 |
CommandPkg |
这些值在创建软件包时使用。提供注释的名称、标签和描述。 |
Idx |
注释所有必需的参数和成员变量,并帮助验证检查。或者,它们可能会显示在输入界面中。提供索引 (Idx ) 和类型。 |
Pkg |
注释将在界面中显示的所有参数和成员变量。如果没有 Idx ,将忽略此注释。 |
StartListen |
启动触发器侦听器。 |
TriggerId |
触发器 ID 是停止触发器必需的。 |
TriggerRunnable |
提供可运行。调用可运行会发送一个信号,该信号会启动与触发器关联的 bot 。 |
使用案例示例
以下用例显示了如何创建定期触发 bot 的计时触发器。
- 使用业务逻辑创建 POJO 类:
public class TriggerDemo { private static final Timer TIMER = new Timer(true); public void startTrigger(Double interval) { TimerTask timerTask = new TimerTask() { @Override public void run() { // Do nothing } }; TIMER.schedule(timerTask, interval.longValue()); } }
bot 中可以存在多个相同类型的触发器。所有触发器均由 triggerId 标识。
- 将 triggerId 添加到类:
@TriggerId private String triggerUid; public String getTriggerUid() { return triggerUid; } public void setTriggerUid(String triggerUid) { this.triggerUid = triggerUid; }
- 单独存储 TimerTask,以便当您想要停止特定触发器时,使用 triggerId。
private static final Map<String, TimerTask> taskMap = new ConcurrentHashMap<>(); public void startTrigger(Double interval) { TimerTask timerTask = new TimerTask() { @Override public void run() { // Do nothing } }; taskMap.put(this.triggerUid, timerTask); TIMER.schedule(timerTask, interval.longValue()); }
- 条件满足时启动触发器。接受一个可运行,并适当地调用它。
@TriggerRunnable private Runnable runnable; public Runnable getRunnable() { return runnable; } public void setRunnable(Runnable runnable) { this.runnable = runnable; } public void startTrigger(Double interval) { TimerTask timerTask = new TimerTask() { @Override public void run() { runnable.run(); } }; taskMap.put(this.triggerUid, timerTask); TIMER.schedule(timerTask, interval.longValue()); }
- 单独停止触发器(使用 TimerTask),或同时停止所有触发器(StopAllTriggers)。
/* * Cancel all the task and clear the map. */ @StopAllTriggers public void stopAllTriggers() { taskMap.forEach((k, v) -> { if (v.cancel()) { taskMap.remove(k); } }); } /* * Cancel the task and remove from map * * @param triggerUid */ @StopListen public void stopListen(String triggerUid) { if (taskMap.get(triggerUid).cancel()) { taskMap.remove(triggerUid); } }
- 添加其余注释。
@BotCommand(commandType = BotCommand.CommandType.Trigger) @CommandPkg(label = "Demo Trigger", description = "Demo Trigger", icon = "email.svg", name = "demoTrigger") public class TriggerDemo { //Other code @StartListen public void startTrigger(@Idx(index = "1", type = AttributeType.NUMBER) @Pkg(label = "Please provide the interval to trigger in seconds", default_value = "120", default_value_type = DataType.NUMBER) @GreaterThan("0") @NumberInteger @NotEmpty Double interval) { //Other code } }