2

我已经为添加、更新和删除事件配置了 FileNet 工作流订阅。工作流调用 Java 组件来发送通知消息(给第三方)。

我们希望在“更新”事件的通知消息中看到“之前”和“之后”属性值。

触发订阅的“Event”对象有一个“Modified Properties”成员,所以我希望我可以在工作流中创建一个相应的“ModifiedProperties”字符串数组,并拥有订阅映射“Update.ModifiedProperties = ModifiedProperties”。不幸的是,Event 的“ModifiedProperties”只给出了NEW值,而不是“before”值。<= 所以我看不到任何直接从订阅中获取“之前/之后”值的方法......

看起来“UpdateEvent”对象也有一个“OriginalObject”成员......我也许可以使用Java API从OriginalObject获取“之前”值。

问:这种获取文档属性值之前/之后的方法听起来合理吗?

问:任何想法如何将“OriginalObject”对象从订阅传递到工作流,以便 Java 组件可以使用它?

目标平台是P8 5.2.1;我正在 P8 5.5 上开发。

4

2 回答 2

4

没错,获取原始值的唯一方法是通过 OriginalObject 对象。将数据获取到工作流的最快方法是使用可订阅对象。

因此,解决您的问题的方法是定义一个自定义对象,其中包含描述新旧属性值的属性。您在文档中的更新事件触发的自定义事件处理程序中创建此自定义对象。在这里,您可以使用原始对象填充自定义对象的属性:

Document document = (Document) event.get_OriginalObject();;
Iterator<?> iterator = event.get_ModifiedProperties().iterator();
while (iterator.hasNext()) {
    String modifiedProperty = (String) iterator.next();

    // TODO: Fetch the values from the original object 
    // and set them on the custom object. The details depend
    // on the data structure you choose.
}

接下来,您创建一个在创建自定义对象时触发的工作流订阅。您可以将自定义对象的属性映射到工作流的数据字段。在启动的工作流中,您可以定义附件并指定自定义对象是启动附件。使用 CE_Operation 队列方法,您现在可以在处理完成时删除自定义对象。

于 2018-07-30T06:26:04.583 回答
0
if(objEvent instanceof UpdateEvent) { try { String strModifiedProperties = ""; UpdateEvent updateEvent = (UpdateEvent) objEvent; StringList propertyNames = updateEvent.get_ModifiedProperties(); Iterator iterModifiedProps = propertyNames.iterator(); while(iterModifiedProps.hasNext()) { String modifiedProperty = (String) iterModifiedProps.next(); strModifiedProperties = strModifiedProperties+modifiedProperty+","; } strModifiedProperties = strModifiedProperties.substring(0, strModifiedProperties.lastIndexOf(",")); } catch (Exception e) { System.out.println("onEvent : Exception while executing UpdateEvent: "+e.getMessage()); } }
于 2022-02-21T05:58:24.097 回答