PromotionNotice对象获取异常记录

发布于:2025-03-06 ⋅ 阅读:(85) ⋅ 点赞:(0)

项目场景:

项目场景:通过类型为PromotionNotice的数据审批流程发布部件及关联的模型数据,并对模型进行可视化处理,最后将可视化文件传递至生产系统


问题描述

生产系统反馈缺失部分图纸,到PLM系统查阅相关流程发现,流程中是存在这些缺失图纸的,只是这些图纸没有进行可视化处理。
查看系统中获取流程对象的代码:

    public static Set<Persistable> getPromotionTargets(PromotionNotice pn) throws WTException {
        Set<Persistable> persistables = new HashSet<>();
        boolean enforce = SessionServerHelper.manager.setAccessEnforced(false);
        try {
            QueryResult queryResult = MaturityHelper.service.getPromotionTargets(pn);
            while (queryResult.hasMoreElements()) {
                Object object = queryResult.nextElement();
                if (object instanceof WTPart) {
                    WTPart part = (WTPart) object;
                    persistables.add(part);
                } else if (object instanceof EPMDocument) {
                    EPMDocument epm = (EPMDocument) object;
                    persistables.add(epm);
                } else if (object instanceof WTDocument) {
                    WTDocument doc = (WTDocument) object;
                    persistables.add(doc);
                }
            }
        } finally {
            SessionServerHelper.manager.setAccessEnforced(enforce);
        }
        return persistables;
    }

原因分析:

这里的方法获取的是流程的升级对象,系统中查看流程的升级对象发现数据与表单中的数据不一致,查看流程的相关对象,数据与表单数据是一致的。猜测可能是流程中执行添加数据时导致的,一种可能是添加功能本身异常,只添加到了流程的相关对象,未添加到升级对象,另一种可能就是系统不稳定导致的添加异常。经测试,添加功能是正常的,查看代码,也都有添加相关对象和升级对象的逻辑。暂定此次异常为偶发问题。


解决方案:

如果在不考虑性能的情况下,可以用Set既收集升级对象又收集相关对象。
也可以只针对流程重要数据处理节点增加流程相关对象的收集。

下面是获取流程对象的方法:
方法一:

QueryResult queryResult = MaturityHelper.service.getPromotionTargets(pn);

方法二:

MaturityBaseline baseline = pn.getConfiguration();
QueryResult queryResult = BaselineHelper.service.getBaselineItems(baseline);

方法三:

Collection<Promotable> items = PromotionNoticeUtils.getPromotionNoticeItems(pn);

以上方法都是获取流程升级对象的方法。
方法四:

String typeName = ObjectTypeUtils.getInternalTypeName(pn);
PromotionNoticeOptions option = PromotionNoticeHelper.getPromotionNoticeOptions(typeName);
String groupId = option.mappingToRelatedObjectGroupId();
RelatedObjectGroupService service = XWorksHelper.getRelatedObjectGroupService();
RelatedObjectGroup group = service.getRelatedObjectGroup(pn, groupId);
List<Persistable> members = service.getMemberObjects(group, GroupMemberType.ALL);

此方法为获取流程相关对象的方法。



网站公告

今日签到

点亮在社区的每一天
去签到