简介:这份 Aras PLM 学习文档面向刚接触产品生命周期管理系统的工程师、实施人员与运维管理者,帮助其快速理解 Aras PLM 的系统管理机制与配置逻辑。资源以 docx 格式交付,压缩包内共 1 个文件,体积约 11.06MB,内容为一份结构完整的 Word 版系统管理使用手册,便于离线查阅与打印标注。手册按模块组织,涵盖用户管理、权限、数据类型、对象类型等核心章节,具体涉及用户管理页面、登录用户、创建参与者与特殊参与者,以及权限创建、发现权限、可创建者权限、创建子类对象权限、TOC 访问权限等配置要点,并延伸至数据类型、创建列表、外部数据类型与配置序列等内容。目前已有 1275 人学习,适合作为系统管理员入门与日常配置查询的参考材料,也可用于梳理权限体系与数据建模思路。
1. 从一份 Aras 学习文档说起:PLM 二次开发到底在学什么
很多人第一次接触 Aras,是因为公司要换 PLM 系统,或者项目里突然丢过来一个 Aras 环境让你做定制。打开官方文档一看,Innovator、ItemType、AML、Method、Workflow 这些词全堆在一起,反而不知道从哪下手。Aras 学习文档真正要解决的不是「把手册读一遍」,而是搞清楚这套 PLM 平台的元数据驱动模型:业务对象怎么定义、界面怎么生成、逻辑写在哪一层、数据怎么查。它适合三类人:刚接手 Aras 二次开发的工程师、需要做系统集成的后端、以及负责 PLM 实施落地的技术负责人。学它的核心目标只有一个——能独立完成一个 ItemType 从建模到 Method 挂载再到查询验证的闭环,而不是停留在点界面的层面。
2. Aras 元数据模型与 ItemType 建模的最小闭环
2.1 为什么 Aras 的定制入口是 ItemType 而不是数据库表
传统 PLM 二次开发习惯先建表再写 DAO,Aras 反过来:你先定义 ItemType,平台根据元数据自动生成物理表、表单、权限和 API。ItemType 相当于「业务对象的 schema + 行为 + 权限」三合一。理解这一点,后面所有操作才有落脚点。常见做法是先在 Aras Innovator 客户端里建 ItemType,再补 Property,最后挂 Method。数据库层不用手动碰,平台会维护[ItemType名称]这张表以及对应的_KEYED_NAME索引。
2.2 用 AML 定义一个自定义 ItemType
AML(Aras Markup Language)是 Aras 的声明式操作语言,等价于「用 XML 描述一次增删改查」。下面这段 AML 用来创建一个简单的零件扩展对象,字段包含编码、名称和关联的物料类型。
<!-- 创建一个名为 PartExt 的 ItemType,继承自 Part --> <AML> <Item type="ItemType" action="add"> <name>PartExt</name> <label>零件扩展</label> <extends>Part</extends> <implementation_type>table</implementation_type> <!-- 定义属性:编码唯一,名称必填 --> <Relationships> <Item type="Property" action="add"> <name>ext_code</name> <label>扩展编码</label> <data_type>string</data_type> <is_required>1</is_required> <is_unique>1</is_unique> </Item> <Item type="Property" action="add"> <name>ext_name</name> <label>扩展名称</label> <data_type>string</data_type> <is_required>1</is_required> </Item> </Relationships> </Item> </AML>逻辑说明:extends让 PartExt 复用 Part 的字段和权限,避免重复建模;implementation_type设为 table 表示落物理表;is_unique会在数据库层生成唯一约束,插入重复编码时平台直接报错而不是靠应用层判断。参数上,data_type支持 string、integer、decimal、date、item 等,选 item 时还要指定data_source指向目标 ItemType。
2.3 建模后必须验证的三件事
建完 ItemType 不要急着写业务逻辑,先做三步验证,否则后面报错很难定位。
| 验证项 | 操作位置 | 期望结果 |
|---|---|---|
| 物理表是否生成 | 数据库执行SELECT * FROM innovator.PartExt | 表存在且含 ext_code、ext_name 列 |
| 表单是否可打开 | Innovator 客户端搜索 PartExt | 能新建并保存一条记录 |
| 权限是否生效 | 用非管理员账号访问 | 按 Identity 配置正确拦截或放行 |
提示:如果表没生成,先检查 ItemType 是否处于「已发布」状态,未发布的元数据不会触发建表。
3. Method 与 AML 查询:把业务逻辑写进 Aras
3.1 Method 的三种触发方式和选型
Aras 的 Method 是服务端 JavaScript(Rhino 引擎),按触发时机分三类:ItemType 事件(onBeforeAdd、onAfterUpdate 等)、生命周期/工作流动作、以及被显式调用的工具方法。选型原则很简单——数据校验放 onBefore 系列,副作用(发通知、写日志)放 onAfter 系列,跨对象编排放独立 Method 由前端按钮调用。不要把所有逻辑塞进 onAfterAdd,那样事务边界会失控。
3.2 写一个带参数校验的 onBeforeAdd Method
下面这段 Method 挂在 PartExt 的 onBeforeAdd 上,作用是校验 ext_code 前缀并自动补全 ext_name。
// PartExt onBeforeAdd:校验编码前缀,自动填充名称 var extCode = this.getProperty("ext_code", ""); var extName = this.getProperty("ext_name", ""); // 编码必须以 PE- 开头,否则中断保存 if (extCode.indexOf("PE-") !== 0) { return this.getInnovator().newError("扩展编码必须以 PE- 开头"); } // 名称为空时用编码兜底,避免必填校验失败 if (extName === "") { this.setProperty("ext_name", extCode + "-默认名称"); } // 返回 this 表示继续执行,返回 Error 则事务回滚 return this;逻辑说明:this是当前操作的 Item 实例,getProperty/setProperty读写字段;返回newError会让整个 add 操作回滚,这是 Aras 里最常用的中断手段。参数上,getProperty第二个参数是默认值,避免字段不存在时抛异常。注意 Method 里不要直接写 SQL,跨对象查询用 AML 更安全。
3.3 用 AML 做条件查询和分页
查询是二次开发里最高频的操作。下面这段 AML 按编码模糊匹配并限制返回条数。
<AML> <Item type="PartExt" action="get" select="ext_code,ext_name"> <ext_code condition="like">PE-%</ext_code> <!-- 按创建时间倒序,取前 20 条 --> <order_by>created_on desc</order_by> <page>1</page> <page_size>20</page_size> </Item> </AML>逻辑说明:condition="like"支持%通配;select只取需要的列,减少网络传输;page和page_size是 Aras 内置分页参数,不要用TOP语法。参数上,order_by可多字段逗号分隔,page_size默认 25,超过 1000 时平台会截断,需要分批拉取。
注意:AML 查询默认受权限过滤,如果发现查不到数据,先确认当前用户对目标 ItemType 有 get 权限,而不是怀疑 SQL 写错。
4. Aras 学习文档里的排错与性能调优实战
4.1 常见报错的定位路径
Aras 报错信息往往只给一句「Item is not valid」,真正原因藏在服务端日志里。定位顺序建议固定下来:先看 Innovator 客户端弹出的错误码,再去\Innovator\Server\logs\下找对应时间戳的日志,最后用 AML 复现最小操作。常见错误对照如下。
| 报错关键词 | 大概率原因 | 处理方式 |
|---|---|---|
| Item is not valid | 必填字段为空或类型不符 | 检查 Property 的 is_required 和 data_type |
| Access denied | Identity 权限未配置 | 在 ItemType 的权限页补 get/update 授权 |
| Method execution failed | Method 语法错误或返回了 Error | 在 Method 编辑器里单步调试 |
| Duplicate key | 唯一约束冲突 | 查 is_unique 字段是否重复 |
4.2 查询慢的三个调优点
Aras 查询变慢通常不是数据库本身的问题,而是 AML 写法或索引缺失。第一,检查select是否拉了全字段,改成按需取列;第二,确认查询条件字段在数据库里有索引,尤其是自定义 Property;第三,避免在 Method 里循环调用 AML,改成一次批量查询再在内存里匹配。
-- 为自定义字段补索引,提升 AML 条件查询速度 CREATE INDEX idx_partext_ext_code ON innovator.PartExt (ext_code);逻辑说明:Aras 不会自动为所有自定义 Property 建索引,高频查询字段需要手动补。参数上,索引名建议带表名前缀避免冲突,建完后用执行计划确认命中。
4.3 用 Method 做批量数据处理时的注意事项
批量场景下最容易踩的坑是事务过大导致锁表。常见做法是分批提交,每批 200 到 500 条,并在 Method 里捕获单条失败继续执行,而不是整批回滚。
// 批量更新 PartExt 名称,分批提交 var batchSize = 300; var items = this.getInnovator().applyAML("<AML><Item type='PartExt' action='get'><ext_code condition='like'>PE-%</ext_code></Item></AML>"); var count = items.getItemCount(); for (var i = 0; i < count; i++) { var item = items.getItemByIndex(i); item.setProperty("ext_name", item.getProperty("ext_code") + "-已同步"); item.setAction("edit"); item.apply(); // 单条提交,失败不影响其他记录 }逻辑说明:getItemCount和getItemByIndex是 Aras 集合的标准遍历方式;setAction("edit")后调用apply()才会落库。参数上,batchSize只是逻辑分批参考,实际提交粒度由apply()决定,生产环境建议配合日志记录失败条目。
5. 把 Aras 学习文档用起来:从能跑到能维护的进阶技巧
学 Aras 到一定阶段,瓶颈不再是「会不会写 Method」,而是「改完之后怎么不破坏别人」。这里分享几个实际项目里验证过的技巧。第一,所有自定义 ItemType 和 Property 加统一前缀,比如ext_,避免和平台升级带来的新字段冲突。第二,Method 里不要硬编码 ItemType 名称,用this.getType()动态获取,方便复用。第三,AML 查询结果尽量用getProperty按需读取,不要一次性转成 JSON 再处理,减少内存占用。
版本管理方面,Aras 的元数据存在数据库里,不像代码可以走 Git。常见做法是定期用 AML 导出 ItemType 和 Method 定义,存成文件纳入版本控制,升级或迁移时再导入。导出命令可以用平台自带的Innovator\Server\bin\下的工具,也可以自己写一个 Method 遍历目标 ItemType 生成 AML 快照。
// 导出指定 ItemType 的元数据为 AML 快照 var itemType = this.getInnovator().getItemByID("ItemType", "PartExt"); var aml = itemType.apply("get"); // 将 aml 写入文件或返回给调用方存档 return aml;逻辑说明:getItemByID按 ID 精确取元数据,apply("get")返回完整 AML 结构。参数上,导出范围要明确,只导自定义对象,平台内置对象不要动,否则导入时容易冲突。
最后一个容易被忽略的点:Aras 的权限模型和生命周期是绑定的。同一个 ItemType 在不同状态下可以配置不同权限,调试时如果发现「明明有权限却改不了」,先确认当前对象处于哪个生命周期状态,再看该状态下的权限矩阵。把这条搞清楚,Aras 学习文档里那些权限相关的章节基本就能串起来了。
本文还有配套的精品资源,点击获取