如何在Cameo中通过对象流传输多数据并在不透明动作/决策中访问
在Cameo Systems Modeler 2021x UAF可执行模型中实现动作间数据交互与修改的解决方案
针对你遇到的三个具体问题的解决方法:
1. Datatype实例属性提取返回Undefined
Cameo的不透明动作(JavaScript脚本)中,不能直接用input.P1的方式访问模型实例的属性,需要调用UML API的getValue()方法。修改动作体为:
x = input.getValue("P1");
同时要确认:
- 输入引脚"input"已正确绑定到你创建的Datatype实例对象,而非Datatype类型本身;
- Datatype的属性名称"P1"拼写完全一致(区分大小写)。
2. 数组输出被拆分、字符串类型判断失效
- 数组输出问题:首先给输出引脚设置数组类型(比如
String[*]、Integer[*]或Any[*],如果是混合类型),然后在动作体中用NativeArray创建符合类型要求的数组:
若输出引脚类型设为result = new NativeArray(["Test", 1]);Any[*],就能完整返回混合类型数组,不会被拆分为单个输出。 - 字符串类型判断:不要依赖传输格式,直接用模型API判断类型:
或者用JavaScript原生的类型判断(针对原生值):if (input.isKindOf(String)) { // 处理字符串逻辑 }if (typeof(input) === 'string') { // 处理字符串逻辑 }
3. NativeArray访问返回对象名称首字母
NativeArray是Cameo封装的Java数组对象,不能用JS原生的input[0]语法访问元素,需要调用get()方法:
x = input.get(0);
这样就能正确获取数组的第一个元素,而非对象toString()结果的字符。
整体流程建议
- 先定义一个包含
MissionName(String)、MissionValue(Integer)、TaskName(String)的复合Datatype,直接封装用户输入的三组值,避免用数组传输混合类型数据,降低处理复杂度; - 在不透明动作中用
getValue()方法提取属性值,进行决策判断; - 修改数据后,同样用
setValue()方法更新实例属性:input.setValue("MissionValue", input.getValue("MissionValue") + 50);
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

