2020年9月15日

Thingworx心得之Events Router与Expression的限制

1.     Events Router的限制

Thingworx尽管参考了面向对象的设计,但是作为一个工业物联网平台,它简化了很多功能。

比如,我们不能直接利用某个ServiceExpression直接给Property赋值,而只能通过Data Binging的方式进行绑定,并且一个Property只能绑定一个数据源。

但是有时候我们有多个数据源,这时就需要自己写Service或者使用Events Router组件。

如下图所示,我们希望点击“Output A”,则输出A;点击“Output B”,则输出列表选中的数据。

其中,列表选中项先绑定到Mashup参数Input2,以模拟Contained Mashup传递的参数。



实际测试:

1)     点击Output A,输出A,正确。

2)     列表选中Area,点击Output B,输出Area,正确。

3)     点击Output A,输出A,正确。

4)     列表选中Area,点击Output B,输出A,错误!

这是因为,Input 1对应的数据来自于Expression输出,每次执行以后,系统都会认为其值已变化(Data Change Type=Always,尽管数值可能不变)。而Input2对应的数据来自于Mashup参数,只有其数值变化时系统才会认为其值已变化。

 

解决办法是强制让Input2发生变化,如增加一个Events Router,并将Events Router 1Output作为Input1,这样的效果相当于Output A执行时,将Input 2强制复位:



2.     Expression的限制

Expression的作用和Service类似,主要用于客户端的简单处理,其限制为:

1)     不能定义临时变量。

2)     不能输出InfoTable

3)     只有Changed事件,没有ServiceInvokeCompleted事件,因此无法严格区分多个Expression的执行顺序。