如何在Teamcenter中为已有Item创建新的ItemRevision?
解决Teamcenter创建已有Item的下一个ItemRevision时的NULL对象错误
错误原因
你遇到的"Wrong symbol NULL object (in object) - required object not exists"错误,本质是创建ItemRevision时未关联到目标父Item。ItemRevision是Item的从属对象,必须绑定到一个已存在的Item实例,否则系统无法识别该版本归属,触发缺失对象的报错。
正确操作步骤(以ITK/C++为例)
1. 获取目标Item的Tag
首先要通过Item ID或其他方式,拿到你要创建新版本的Item对象标识:
tag_t target_item = NULLTAG; // 替换为你的Item ID int err = ITEM_find_item("MY_ITEM_001", &target_item); if (err != ITK_ok || target_item == NULLTAG) { // 处理Item不存在的异常 return err; }
2. 创建ItemRevision并关联父Item
使用CreateObject方法时,必须显式设置item属性(关联父Item),这是必填项:
tag_t new_rev = NULLTAG; // 创建ItemRevision对象 err = AOM_create_object("ItemRevision", &new_rev); if (err != ITK_ok) return err; // 核心步骤:绑定到目标Item err = AOM_set_value(new_rev, "item", target_item); if (err != ITK_ok) return err; // 设置版本号(如"A"、"B",或按系统规则自动生成) err = AOM_set_value_string(new_rev, "revision_id", "B"); if (err != ITK_ok) return err; // 可选:设置其他属性,如对象名称 err = AOM_set_value_string(new_rev, "object_name", "My Item Rev B"); if (err != ITK_ok) return err; // 保存对象 err = AOM_save_without_extensions(new_rev);
简化方式:使用封装API
Teamcenter ITK提供了直接创建版本的封装函数ITEM_create_revision,可以省略手动设置item属性的步骤,更简洁:
tag_t new_rev = NULLTAG; // 参数:父Item Tag、版本号、备注、输出新版本Tag int err = ITEM_create_revision(target_item, "B", "Updated for new requirements", &new_rev);
Java API示例
如果用Teamcenter Java API,逻辑一致:
Session session = Session.getInstance(); // 获取目标Item Item targetItem = (Item) session.getObject(Item.class, "MY_ITEM_001"); // 创建ItemRevision ItemRevision newRev = (ItemRevision) session.createObject("ItemRevision"); // 绑定父Item newRev.setProperty("item", targetItem); // 设置版本号 newRev.setProperty("revision_id", "B"); // 保存 newRev.save();
注意事项
- 确保当前用户拥有创建ItemRevision的权限,以及目标Item的修改权限
- 确认目标Item未处于冻结、作废等不允许创建新版本的状态
- 版本号需符合系统的版本规则(如字母递增、数字递增等)
内容的提问来源于stack exchange,提问作者Vladjkaaa
相关产品推荐
相关产品推荐

