Событие обновления CE: есть ли способ передать значения свойств до / после в рабочий процесс?
Я настроил подписку рабочего потока FileNet на события Add, Update и Delete. Рабочий процесс вызывает компонент Java для отправки уведомления (третьей стороне).
Мы хотели бы видеть значения свойств "до" и "после" в уведомлении о событиях "Обновление".
У объекта "Событие", запускающего подписку, есть член "Модифицированные свойства", поэтому я надеялся, что смогу просто создать соответствующий строковый массив "Modified Properties" в рабочем процессе и получить карту подписки "Update.ModifiedProperties = ModifiedProperties". К сожалению, "Modified Properties" события дает только значение NEW, а не значение "before". <= Так что я не вижу способа получить значения "до / после" непосредственно из подписки...
Похоже, что объект "UpdateEvent" также имеет член "OriginalObject"... и я мог бы использовать Java API для получения значения "before" из OriginalObject.
Вопрос: звучит ли это правдоподобным способом получения значений свойств документа до / после?
Вопрос: Есть идеи, как передать объект "OriginalObject" из подписки в рабочий процесс, чтобы компонент Java мог использовать его?
Целевая платформа - P8 5.2.1; Я занимаюсь разработкой на P8 5.5.
2 ответа
Вы правы, единственный путь к исходным значениям - через объект 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.
}
Затем вы создаете подписку Workflow, запускаемую при создании пользовательского объекта. Вы можете сопоставить свойства вашего пользовательского объекта с полями данных вашего рабочего процесса. В рабочем процессе, который запущен, вы можете определить вложение и указать, что пользовательский объект является исходным вложением. Используя методы очереди 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()); } }