Rebuild Application Index Files¶
本技能为 .application 目录重建两份索引,并在完成后**必须**投递 *.clear_cache 触发设计时缓存刷新:
- pid.index — 模板父子关系。格式:
childTemplateId=parentTemplateId - url.index — 模板 id → 应用内相对路径。格式:
templateId=/appName.application/relative/path/to/file *.clear_cache— 按 applicationId 清空设计时对象缓存、重建数据源(不停url.index监听)
机制见 design/workspace-structure-and-mechanism.md §7.3、§7.5(*.clear_cache)。
When to use¶
模板 XML 被增删改/搬移后,索引会与磁盘不同步。本技能扫描整个 .application 目录,从零再生两份索引;仅改 url.index 会触发 Runtime 重装索引属性,但**不会** clear 已有对象缓存——Agent / 手工批量改盘后须再投递 *.clear_cache 丢弃脏缓存。
Template file format¶
模板为 XML。模板 id 取根元素 id 属性;父 id 取子元素 <parentId>:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resourceVO id="__7PNKKfI4LsbyWz0L7cX">
<name>问卷首页</name>
<parentId>__XelBa3DfXZSIOazulYu</parentId>
...
</resourceVO>
Steps(按序,缺一不可)¶
- 与用户确认目标
.application目录绝对路径。 - 运行重建索引脚本:
将 <skill-dir> 换为本技能目录,<application_dir> 换为 .application 绝对路径。
-
核对输出:脚本会打印写入条目数。可读生成的
pid.index/url.index,向用户摘要(条数、前几行)。 -
必做:投递
*.clear_cache(见下「缓存刷新」)。索引写完后立刻执行,勿跳过。 -
若用户要核对结果,展示两份索引内容,并说明
.clear_cache归档结果(.done/.failed/ 超时)。
缓存刷新(*.clear_cache,必做)¶
Agent / 手工改盘后重建索引,必须**再向 workspace/.sync/ 投递 *.clear_cache,否则 Runtime 可能仍持有旧对象缓存(url.index 变更监听只 initIndex,**不 clear + reloadCacheFromDisk)。
| 项 | 约定 |
|---|---|
| 路径 | {myapps.storage.root}/workspace/.sync/{任意前缀}.clear_cache |
| 内容 | 一行纯文本:applicationId(软件根元素 id 属性) |
| 前缀 | 建议 {软件名}-{时间戳},避免与旧归档混淆 |
| 不做 | **不**停该应用 url.index 监听;不 reloadCacheFromDisk / initCache |
推荐:用脚本投递并等待归档¶
python "<skill-dir>/scripts/clear_cache.py" "<application_dir>"
# 可选:--initial-delay 2 --poll-interval 2 --timeout 120
# --workspace "<storage/workspace>"
脚本从 {name}.application/{name}.application 读取根属性 id,写入触发文件,再按 initial-delay → 轮询 → timeout 检查归档。
| 退出码 | 含义 | Agent 行为 |
|---|---|---|
0 |
已进 .sync/.done/ |
缓存已清,可继续 |
1 |
已进 .sync/.failed/ |
必须警告用户;查 applicationId / 软件是否存在;修正后**重新投递新文件** |
2 |
路径/XML/缺 id | 先修 .application 元数据再投递 |
3 |
超时未归档 | 确认 Runtime/Manager/Job 已监听 .sync/;Designer 不处理 |
**禁止**投递后立刻读盘判定成功/失败。失败时勿改 .failed 内旧文件指望重试。
处理流程¶
写入 .sync/{name}.clear_cache
→ SyncMonitorListener(或启动 drain)
→ 读取 applicationId
→ DesignTimeSerializableCache.clear(applicationId)
→ DataSourceEnv.destoryDataSource + initDataSource
→ 清多语言 / 菜单 / 权限 / MyCache / 流程实例 / JS
→ 成功 → .sync/.done/;失败 → .sync/.failed/
Notes¶
- 脚本尝试将文件当 XML 解析,非 XML 自动跳过。
- 根元素无
id属性的文件忽略。 - 仅有非空
<parentId>的条目进入pid.index。 - 脚本覆盖已有
pid.index与url.index。 url.index路径一律正斜杠。- 重建索引与清缓存**成对执行**:只 rebuild 不投递
*.clear_cache→ 设计时对象缓存可能仍脏。