Skip to content

解决方案打包与可重复导入

Aras 的配置迁移不是“复制数据库差异”,而是把明确纳入 Package Definition 的元数据导出为 AML, 再由 Package Import/Export Utilities 导入目标环境。一个可靠的包必须同时解决范围、依赖、冲突和验证四个问题。

适用版本

本文以 Aras Innovator 2024 Release 的 Package Import Export Utilities 与当前 15.0.2 在线文档为依据。 R37 起,该工具由单独的 MFT 下载分发,不再假定它一定在 Innovator CD Image 内。 命令名、认证窗口和产物布局应以目标 Release 随附工具为准。


1. 三层包模型

层级作用评审问题
Package Definition表示一个可迁移解决方案这个包的业务边界是什么?
Package Group按元数据 ItemType 组织元素是否漏了 List、Permission、CUI 等类型?
Package Element指向具体配置 ItemID、名称和依赖是否稳定?

Package Definition 只会导出已纳入的元素。它不是数据库变更自动追踪器,也不会自动发现所有间接依赖。

命名建议

自定义包可使用稳定的反向域名,例如 com.example.change。 命名只是团队约定;非核心包不会因为名称带点号就一定导出成 com/example/... 目录。


2. imports.mf 才是导入清单

导入工具读取 manifest 文件。官方示例使用扩展名 .mf,常见名称是 imports.mf。 不要再额外发明一个 manifest.xml 并把它描述为必需文件。

xml
<imports>
  <package name="com.example.base"
           path="base/Import" />

  <package name="com.example.change"
           path="change/Import">
    <dependson name="com.example.base" />
  </package>
</imports>
  • name 是清单内的包标识。
  • path 指向该包 AML 文件所在目录。
  • dependson 声明包级导入顺序依赖。
  • 路径相对于 manifest 解析;移动目录后必须重新验证。

合并多个产品包时

不要用某个应用随附的 imports.mf 覆盖仓库总清单。 官方应用安装说明通常要求复制 <package> 节点并合并到现有清单。


3. 建立 Package Definition

3.1 从业务边界开始

以一个“变更原因”定制为例,先列清单:

  • 自定义 ItemType、Property、RelationshipType。
  • Form、View、CUI 与客户端 Method。
  • Server Method、Server Event、Action。
  • List、Value、Sequence、Permission、Identity。
  • Workflow、Life Cycle 与其他被引用配置。

随后在管理界面创建 Package Definition,并通过 Add to Package Definition 将配置 Item 纳入对应 Package Group。

3.2 依赖需要人工评审

常见漏项包括:

  • Property 的 Data Source 指向另一个包的 List 或 ItemType。
  • Form 字段引用未纳入包的 Property、Method 或控件。
  • CUI Item 引用另一个包中的 Command Bar Section。
  • Workflow 活动调用外部 Method 或 Identity。
  • Poly Item 的 poly source 尚未导入。

官方导入的 Thorough 模式会做更多存在性检查,但这不等于一个自动、完整的“Dependency Analysis 按钮”。


4. 导出流程

  1. 在源环境完成配置并保存。
  2. 检查 Package Definition、Groups 和 Elements。
  3. 启动与目标 Release 匹配的 Export Tool。
  4. 通过工具支持的登录流程连接源服务器。
  5. 选择 Package Definition 或指定元素。
  6. 导出到一个干净目录。
  7. 检查生成的 AML、目录和 .mf 清单。
  8. 将文本差异纳入代码评审。

导出后重点检查:

  • 是否出现不应进入包的测试数据。
  • AML 是否保留稳定 ID。
  • 是否漏掉关系项、List Value 或权限。
  • 是否包含密码、token、环境 URL 等秘密或环境值。
  • 文件编码和换行是否被工具或编辑器无意义改写。

版本化 Item

Package Element 对版本化 Item 使用 config_id 语义。不要自行把每个 generation 当成独立包元素处理;按官方工具生成结果评审。


5. 导入的两组选项

导入界面把 TypeMode 分开,它们回答不同问题。

5.1 Conflict Type

Type已存在同 ID Item 时使用建议
Ignore跳过已存在项仅在确认目标已有正确内容时使用
Merge用新 AML 更新目标项常规增量部署前先在副本环境验证

当 AML action 为 add 且同 ID 已存在时,Merge 会按官方规则把它改为 edit。 如果 AML 本来不是 add,工具会按原 action 使用。

5.2 Validation Mode

Mode行为使用建议
Fast不执行额外的导入前验证仅用于已经充分验证且强调速度的受控流水线
Thorough在 apply 前检查更多依赖项是否存在首次导入、开发与故障排查优先使用

官方推荐导入 AML 通常使用 action="add",除非确实需要其他动作,例如明确删除某项。

没有 Recreate 模式

官方 Import Tool 的选择是 Ignore/Merge 与 Fast/Thorough。 “Recreate 会先删再建”不是这里的官方模式。删除配置可能破坏引用和数据,不应被包装成普通导入选项。


6. 可复现实验:空白基线双次导入

准备一个可恢复的测试数据库,并为发布产物计算校验和。

第一次导入

  1. 备份测试数据库。
  2. 使用 Thorough + Merge 导入 imports.mf
  3. 保存完整日志和 Release Settings。
  4. 登录 Innovator,确认目标 ItemType、Form、Method 和权限存在。
  5. 执行一个最小业务场景。

第二次导入

  1. 不恢复数据库,使用同一产物再次导入。
  2. 验证没有重复 List Value、关系项或 CUI 按钮。
  3. 比较两次日志中的错误与警告。
  4. 确认业务场景仍然通过。

依赖失败实验

  1. 复制 manifest 到临时目录。
  2. 故意移除一个测试包的 <dependson> 或依赖包。
  3. 使用 Thorough 导入到另一份可丢弃数据库。
  4. 记录工具给出的依赖错误。
  5. 恢复清单后重试并归档结果。

实验的目标不是证明“按钮变绿”,而是证明同一产物可按明确顺序重复部署。


7. Git 与发布建议

  • 提交 AML 文本、imports.mf、变换文件和发布说明。
  • 不提交登录密码、OAuth secret、数据库备份和临时日志。
  • PR 中列出新增、修改、删除以及外部依赖。
  • 用环境变量或秘密库提供连接信息。
  • 在 SDE/UAT 先跑 Thorough,再考虑生产模式。
  • 每次发布记录工具版本、Innovator Release、包校验和和导入日志。
  • 数据库备份与回滚脚本必须在生产导入前验证。

Aras DevOps 的 SDE、Pipeline 和 Baseline 是订阅工具链的具体能力;普通 Git 仓库并不会自动获得这些行为。


8. 常见错误

manifest.xml 当必需主清单

Package Import Tool 使用 .mf manifest;本教程统一使用 imports.mf

宣称导出目录天然符合 Git 标准

核心包与非核心包的目录规则不同。Git 是否易审查取决于仓库约定和导出结果治理。

依赖完全交给工具自动发现

工具能做检查,但包边界与跨包依赖仍需人工建模和验证。

默认使用 Fast

Fast 减少验证,不代表结果更正确。新包应先通过 Thorough。

在生产直接尝试删除再导入

配置 Item 常被业务数据引用。任何删除都应作为单独迁移设计并在数据库副本演练。


9. 官方依据

文档最后核验:2026-08-13。

本站内容仅供学习与参考