CE 更新事件:有什么方法可以将 before/after 属性 值传递给工作流?
CE Update Event: any way to pass before/after property values to a workflow?
我已经在添加、更新和删除事件上配置了 FileNet 工作流订阅。工作流调用 Java 组件发送通知消息(给第三方)。
我们希望在 "Update" 事件的通知消息中看到 "before" 和 "after" 属性 值。
触发订阅的 "Event" 对象有一个 "Modified Properties" 成员,所以我希望我可以在工作流中创建一个相应的 "ModifiedProperties" 字符串数组,并进行订阅地图 "Update.ModifiedProperties = ModifiedProperties"。不幸的是,事件的 "ModifiedProperties" 只给出 NEW 值,而不是 "before" 值。
<= 所以我看不出有任何方法可以直接从订阅中获取 "before/after" 值...
看起来 "UpdateEvent" 对象也有一个 "OriginalObject" 成员...我也许可以使用 Java API 来获取 "before" 来自 OriginalObject 的值。
问:这种获取 before/after 文档 属性 值的方法听起来合理吗?
问:如何将 "OriginalObject" 对象从订阅传递到工作流,以便 Java 组件可以使用它?
目标平台为P8 5.2.1;我在 P8 5.5 上开发。
你是对的,获取原始值的唯一方法是通过 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 队列方法,您现在可以在处理完成后删除自定义对象。
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()); } }
我已经在添加、更新和删除事件上配置了 FileNet 工作流订阅。工作流调用 Java 组件发送通知消息(给第三方)。
我们希望在 "Update" 事件的通知消息中看到 "before" 和 "after" 属性 值。
触发订阅的 "Event" 对象有一个 "Modified Properties" 成员,所以我希望我可以在工作流中创建一个相应的 "ModifiedProperties" 字符串数组,并进行订阅地图 "Update.ModifiedProperties = ModifiedProperties"。不幸的是,事件的 "ModifiedProperties" 只给出 NEW 值,而不是 "before" 值。 <= 所以我看不出有任何方法可以直接从订阅中获取 "before/after" 值...
看起来 "UpdateEvent" 对象也有一个 "OriginalObject" 成员...我也许可以使用 Java API 来获取 "before" 来自 OriginalObject 的值。
问:这种获取 before/after 文档 属性 值的方法听起来合理吗?
问:如何将 "OriginalObject" 对象从订阅传递到工作流,以便 Java 组件可以使用它?
目标平台为P8 5.2.1;我在 P8 5.5 上开发。
你是对的,获取原始值的唯一方法是通过 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 队列方法,您现在可以在处理完成后删除自定义对象。
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()); } }