You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EA 15.2旧状态机模板生成代码无法包含子状态的问题咨询

解决EA v15.2旧状态机模板获取子状态的问题

针对你在EA v15.2旧模板中无法通过AllStates集合获取子状态的问题,以下是几个可行的解决方法:

1. 递归遍历主状态的SubStates集合

旧模板的AllStates集合可能存在枚举不全的bug,你可以手动遍历每个主状态,并递归获取其SubStates集合来补全状态列表。示例模板代码如下:

$sStates = ""
%EASLList="StateEnumerate" @separator="" @owner=$StateMachineGUID @collection="States"
    %CurrentStateGUID = %GUID%
    $sStates = $sStates + "	" + %Name% + ",\n"
    // 递归遍历子状态
    %EASLList="StateEnumerate" @separator="" @owner=$CurrentStateGUID @collection="SubStates"
        $sStates = $sStates + "	" + %Name% + ",\n"
    %
%
// 移除最后一个多余的逗号和换行
$sStates = Left($sStates, Length($sStates)-2)

这段代码先枚举所有主状态,再对每个主状态枚举其子状态,最终拼接出包含所有主状态和子状态的列表。

2. 内嵌SQL查询直接从EA数据库获取所有状态

EA模板支持内嵌SQL查询,你可以直接查询t_object表来获取指定状态机下的所有状态(包括子状态)。示例代码:

$sStates = ""
%SQL="SELECT o.Name FROM t_object o 
       INNER JOIN t_object sm ON o.Package_ID = sm.Package_ID 
       WHERE sm.GUID = '$StateMachineGUID' 
       AND o.Object_Type IN ('State','SubState') 
       ORDER BY o.ParentID, o.Name"
    $sStates = $sStates + "	" + %Name% + ",\n"
%
$sStates = Left($sStates, Length($sStates)-2)

该查询通过关联状态机所在包,筛选出所有类型为State或SubState的对象,确保包含所有层级的状态。

3. 修复SubMachine ID为空的问题

你提到HasSubMachine为true但SubMachine ID为空,这可能是模型引用异常导致的:

  • 右键状态机模型,选择**"Synchronize Package"**刷新模型引用
  • 检查子状态机的GUID是否正确,确保子状态机与父状态的关联未断开
  • 尝试重新创建父状态与子状态机的关联,再重新生成代码

内容的提问来源于stack exchange,提问作者Stefan Jacobs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:46:02