使用軟件包 SDK 創建觸發器
使用時 Automation 360,您可以使用 SDK 軟件包創建觸發器。
使用觸發器
用於 Automation 360 創建觸發器。當 bot 滿足某些條件時,觸發器將啓動,並等待條件更改或停止。當觸發器的條件匹配時,調用運行方法來向觸發器發出信號。
所需的註釋
若要建立觸發程序、需要下列附註:
註解 | 使用方式 |
---|---|
BotCommand |
將 BotCommand 註釋與 觸發器一起使用 作 爲命令類型 。這可確保普通舊 Java 對象 (POJO) 適合使用創建觸發器 Automation 360。 |
CommandPkg |
創建軟件包時使用這些值。提供註釋的名稱、標籤和說明。 |
IDX |
註釋所有必需的參數和成員變量,並幫助進行驗證檢查。或者,它們可能會顯示在輸入的接口中。提供索引 (IDX ) 和類型。 |
包裝 |
註釋界面中顯示的所有參數和成員變量。如果 沒有 IDX 附帶此註釋,則將忽略該註釋 。 |
StartListen |
啓動觸發器偵聽器。 |
TriggerId |
觸發 ID ,用於停止觸發程序。 |
TriggerRunnable |
提供可運行。調用 runnable 發送一個信號,該信號啓動 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()); }
- 單獨停止觸發器(使用 triggerId),或同時停止所有觸發器(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 } }