我创建了一个集成流,用于查询数据库并每小时将结果存储到SAP HANA数据库。我在SAP HANA中复制的初始数据库表有一个字段,其中包含每个条目数据被更改的时间戳。为了提高性能,我不想每次都选择原始数据库中的每个条目,而是发送查询以仅检索在过去一小时内更改或创建的条目的结果。为此,我需要一个iFlow之外的变量,我可以调用它,并使用上次运行iFlow时的时间戳进行更新,并在查询中使用它。
iFlow启动事件是设置为每小时运行一次的Timer Start事件,我尝试使用“Write Variables”块存储该变量并将其设置为Global Scope。但是当集成流程结束并在一小时后运行时,它会重置此变量。
这对我来说有什么好办法呢?
谢谢。
答案 0 :(得分:3)
对于大多数IFlow,最好使用Local范围。仅当多个IFlow必须访问一个变量时才需要全局范围。
以下是我的建议:
将所有必需的功能组合到子流程中 - 以多种方式重复使用您的任务(添加其他启动事件)非常方便。 因此,将Timer事件放入顶级Integration过程并调用所需的子进程:
要获取lastRun(上次运行的dateTime)和thisRun(当前日期时间),请使用以下命令: 好的格式是$ {date:now:yyyy-MM-dd' H&C:HH:mm:ss.SSSXXX},它是ISO8601兼容的。
不要混淆sap_global_store标签,它不是全局变量可见性级别。
' thisRun'变量不是过程开始的精确日期时间。真正的一个是msg.properties.CamelCreatedTimestamp,但CamelCreatedTimestamp需要一些小脚本功夫。