武汉做网站的德升瑞杰百度竞价排名多少钱
项目场景:
项目场景:通过类型为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);
此方法为获取流程相关对象的方法。